#!/usr/bin/env python3 """Figure ch13 — trois indices souvent confondus, données RÉELLES de data/raw, rebasés T1 2017 = 100 : IPC Québec (18-10-0004-01, v41691783), IPLN Montréal total maison et terrain (18-10-0205-01, v111955484), IPCB Montréal bâtiments résidentiels (18-10-0289-01). Sortie : assets/figures/ch13/ch13-fig-indices.pdf""" import sys, pathlib ROOT = pathlib.Path(__file__).resolve().parents[3] sys.path.insert(0, str(ROOT / "analysis/python")); sys.path.insert(0, str(ROOT / "analysis/python/cases")) import matplotlib.pyplot as plt from traite.style import setup, palette, savefig, LARGEUR import ch13_sources as cas def main(): setup() t = cas.indices_compares() x = range(len(t)) fig, ax = plt.subplots(figsize=(LARGEUR, 3.3)) series = [("ipcb_mtl_resid_base2017", "IPCB, Montréal, bâtiments résidentiels (coût de construction)", 2.2, "-"), ("ipln_mtl_base2017", "IPLN, Montréal, maison et terrain (prix des logements neufs)", 1.6, "-"), ("ipc_quebec_base2017", "IPC, Québec, ensemble (prix à la consommation)", 1.6, "--")] for i, (col, lab, lw, ls) in enumerate(series): ax.plot(list(x), t[col], color=palette.cat[i], lw=lw, ls=ls, label=lab) ax.annotate(f"{t[col].iloc[-1]:.0f}", xy=(len(t) - 1, t[col].iloc[-1]), xytext=(4, 0), textcoords="offset points", fontsize=7.5, va="center", color=palette.ink) ax.axhline(100, color=palette.ink2, lw=0.6, ls=":") ticks = [i for i, q in enumerate(t["trimestre"]) if q.endswith("T1")] ax.set_xticks(ticks); ax.set_xticklabels([t["trimestre"].iloc[i][:4] for i in ticks]) ax.set_xlim(-0.5, len(t) + 1.5); ax.set_ylim(95, 190) ax.set_ylabel("Indice (T1 2017 = 100)") ax.legend(loc="upper left", fontsize=7.5) out = savefig(fig, "ch13/ch13-fig-indices.pdf"); print("OK", out) if __name__ == "__main__": main()