#!/usr/bin/env python3 """Figure ch43 — carte schématique des 48 immeubles du cas 4 (DONNÉES SYNTHÉTIQUES, coordonnées fictives autour des six RMR) : taille ∝ valeur 2026, immeubles en zone inondable et terrains contaminés mis en évidence ; aucun fond de carte. Sortie : assets/figures/ch43/ch43-fig-carte-cas4.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 numpy as np, matplotlib.pyplot as plt from traite.style import setup, palette, savefig, LARGEUR from traite import cas4 def main(): setup() pf = cas4.charger()["portefeuille"] fig, ax = plt.subplots(figsize=(LARGEUR, 3.9)) s = np.sqrt(pf["valeur_2026"] / 1e6) * 38 base = pf[(pf["zone_inondable"] == 0) & (pf["contamination_sol"] == 0)] ax.scatter(base["lon"], base["lat"], s=s[base.index], color=palette.cat[0], alpha=0.55, linewidths=0, label="immeuble sans risque déclaré") fl = pf[pf["zone_inondable"] == 1] ax.scatter(fl["lon"], fl["lat"], s=s[fl.index], facecolor="none", edgecolor=palette.cat[1], linewidths=1.8, label="zone inondable (3)", zorder=4) so = pf[pf["contamination_sol"] == 1] ax.scatter(so["lon"], so["lat"], s=s[so.index], facecolor="none", edgecolor=palette.cat[2], linewidths=1.8, linestyle="--", label="contamination du sol (2)", zorder=4) for _, r in pf[(pf["zone_inondable"] == 1) | (pf["contamination_sol"] == 1)].iterrows(): ax.annotate(f"{r['id_immeuble']} · {r['valeur_2026']/1e6:.1f} M$", (r["lon"], r["lat"]), xytext=(7, 5), textcoords="offset points", fontsize=7, color=palette.ink) centres = {"Montréal": (45.52, -73.60), "Québec": (46.81, -71.22), "Gatineau": (45.47, -75.70), "Sherbrooke": (45.40, -71.89), "Trois-Rivières": (46.35, -72.55), "Saguenay": (48.43, -71.07)} for nom, (la, lo) in centres.items(): g = pf[pf["rmr"] == nom] ax.text(lo, la + 0.22, f"{nom}\n{len(g)} imm. · {g['valeur_2026'].sum()/1e6:.0f} M$", ha="center", fontsize=7.5, color=palette.ink2) ax.set_xlabel("Longitude (°, coordonnées fictives)"); ax.set_ylabel("Latitude (°)") ax.set_xlim(-76.4, -70.4); ax.set_ylim(44.9, 49.1); ax.set_aspect(1.35) ax.legend(loc="upper left", fontsize=7.5, markerscale=0.6) fig.tight_layout() savefig(fig, "ch43/ch43-fig-carte-cas4.pdf") if __name__ == "__main__": main()