SPB Git
2.5 KB · 38 lines python
1#!/usr/bin/env python32"""Figure ch04 — structure du parc de logements : ménages privés selon le type de construction, Québec et Canada (parts), et3mode d'occupation par type au Québec. DONNÉES RÉELLES : Statistique Canada, Recensement de 2021, tableau 98-10-0240-01 (WDS, data/raw).4Sortie : assets/figures/ch04/ch04-fig-parc-types.pdf"""5import sys, pathlib6ROOT = pathlib.Path(__file__).resolve().parents[3]7sys.path.insert(0, str(ROOT / "analysis/python")); sys.path.insert(0, str(ROOT / "analysis/python/cases"))8import numpy as np, matplotlib.pyplot as plt9from matplotlib.ticker import FuncFormatter10from traite.style import setup, palette, savefig, LARGEUR11import ch04_marches as cas1213def main():14    setup()15    sp = cas.structure_parc().sort_values("qc_menages", ascending=True)16    fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(LARGEUR, 3.3), gridspec_kw={"width_ratios": [1.15, 1]})17    y = np.arange(len(sp)); h = 0.3818    ax1.barh(y + h / 2, sp["qc_part"] * 100, h, color=palette.cat[0], label="Québec")19    ax1.barh(y - h / 2, sp["ca_part"] * 100, h, color=palette.cat[1], label="Canada")20    ax1.set_yticks(y); ax1.set_yticklabels(sp["court"]); ax1.set_xlabel("Part des ménages privés (%)")21    ax1.xaxis.set_major_formatter(FuncFormatter(lambda v, p: f"{v:.0f}")); ax1.legend(loc="lower right")22    for yi, (q, c) in enumerate(zip(sp["qc_part"], sp["ca_part"])):23        ax1.text(q * 100 + 0.6, yi + h / 2, f"{q*100:.1f}".replace(".", ","), va="center", fontsize=7, color=palette.ink)24    ax1.set_title("Type de construction", loc="left")25    prop = sp["qc_proprietaires"] / sp["qc_menages"] * 100; loc = sp["qc_locataires"] / sp["qc_menages"] * 10026    ax2.barh(y, prop, 0.6, color=palette.cat[0], label="Propriétaires")27    ax2.barh(y, loc, 0.6, left=prop, color=palette.cat[2], label="Locataires")28    ax2.set_yticks(y); ax2.set_yticklabels([]); ax2.set_xlim(0, 100); ax2.set_xlabel("Ménages du type (%), Québec")29    ax2.axvline(59.9, color=palette.ink2, lw=0.7, ls=":"); ax2.text(60.8, len(sp) - 0.55, "59,9 % (ensemble)", fontsize=7, color=palette.ink2)30    for yi, p in enumerate(prop):31        ax2.text(min(p, 93) - 1.5, yi, f"{p:.0f}", va="center", ha="right", fontsize=7, color="white" if p > 12 else palette.ink)32    ax2.legend(loc="upper center", bbox_to_anchor=(0.5, -0.16), ncol=2, fontsize=7); ax2.set_title("Mode d'occupation, Québec", loc="left")33    fig.tight_layout(w_pad=1.0)34    out = savefig(fig, "ch04/ch04-fig-parc-types.pdf"); print("OK", out)3536if __name__ == "__main__":37    main()38
Files · 8e522ed3d370f600dee36015720c0600cbb26a05
Menu

Theme