SPB Git
3.3 KB · 46 lines python
1#!/usr/bin/env python32"""Figure ch04 — carte schématique des six RMR du Québec : position des centres (coordonnées de la Base de données toponymiques du Canada,3Ressources naturelles Canada, service geonames, consulté le 2026-10-31), surface des cercles proportionnelle à la population au 1er juillet 20254(Statistique Canada, tableau 17-10-0148-01). Aucun fond de carte ni tuile : schéma en coordonnées géographiques (projection équirectangulaire,5facteur cos(47°) sur la longitude). Sortie : assets/figures/ch04/ch04-fig-carte-rmr.pdf"""6import sys, pathlib, math7ROOT = pathlib.Path(__file__).resolve().parents[3]8sys.path.insert(0, str(ROOT / "analysis/python")); sys.path.insert(0, str(ROOT / "analysis/python/cases"))9import matplotlib.pyplot as plt10from traite.style import setup, palette, savefig, LARGEUR11import ch04_marches as cas1213# Coordonnées (lat, lon) des toponymes « CITY » de la BDTC (geogratis.gc.ca/services/geoname, 2026-10-31)14CENTRES = {"Montréal": (45.508822, -73.554077), "Québec": (46.813819, -71.207997), "Ottawa-Gatineau (partie du Québec)": (45.427929, -75.710938),15           "Sherbrooke": (45.404047, -71.893171), "Trois-Rivières": (46.343077, -72.543383), "Saguenay": (48.428221, -71.062202)}16ETIQ = {"Ottawa-Gatineau (partie du Québec)": "Gatineau\n(RMR Ottawa-Gatineau,\npartie du Québec)"}17DECAL = {"Montréal": (0.0, -0.42), "Québec": (0.35, 0.18), "Ottawa-Gatineau (partie du Québec)": (0.0, 0.36), "Sherbrooke": (0.0, -0.28),18         "Trois-Rivières": (0.0, 0.25), "Saguenay": (0.0, 0.25)}1920def main():21    setup()22    pop = cas.population_rmr()[2025]23    k = math.cos(math.radians(47.0))24    fig, ax = plt.subplots(figsize=(LARGEUR, 3.9))25    ref = pop["Montréal"]26    for nom, (lat, lon) in CENTRES.items():27        x, y = lon * k, lat28        r = 1400 * pop[nom] / ref  # surface ∝ population29        ax.scatter([x], [y], s=max(r, 18), color=palette.cat[0], alpha=0.35, edgecolor=palette.cat[0], lw=1.0, zorder=3)30        ax.scatter([x], [y], s=10, color=palette.ink, zorder=4)31        dx, dy = DECAL[nom]32        ax.text(x + dx, y + dy, f"{ETIQ.get(nom, nom)}\n{pop[nom]:,.0f} hab.".replace(",", " "), ha="center", va="center", fontsize=7.5, color=palette.ink, zorder=5)33    # repères : fleuve Saint-Laurent schématisé par la droite reliant Montréal, Trois-Rivières et Québec (segments)34    pts = [CENTRES["Montréal"], CENTRES["Trois-Rivières"], CENTRES["Québec"]]35    ax.plot([p[1] * k for p in pts], [p[0] for p in pts], color=palette.grid, lw=5, alpha=0.9, zorder=1, solid_capstyle="round")36    ax.text((CENTRES["Montréal"][1] * k + CENTRES["Trois-Rivières"][1] * k) / 2 + 0.05, 46.05, "axe du Saint-Laurent (schématique)", fontsize=7, color=palette.ink2, rotation=24)37    ax.set_xlim(-75.9 * k - 0.6, -70.6 * k + 0.8); ax.set_ylim(44.7, 49.2)38    ax.set_xticks([lon * k for lon in (-76, -75, -74, -73, -72, -71)]); ax.set_xticklabels([f"{abs(l)}° O" for l in (-76, -75, -74, -73, -72, -71)])39    ax.set_yticks([45, 46, 47, 48, 49]); ax.set_yticklabels([f"{v}° N" for v in (45, 46, 47, 48, 49)])40    ax.set_aspect("equal"); ax.grid(True, lw=0.4)41    ax.text(-75.9 * k - 0.45, 49.0, "Surface des cercles proportionnelle à la population au 1er juillet 2025", fontsize=7.5, color=palette.ink2)42    out = savefig(fig, "ch04/ch04-fig-carte-rmr.pdf"); print("OK", out)4344if __name__ == "__main__":45    main()46
Files · fd7f44c8789c8b7d81811c1898b290bc997b5c13
Menu

Theme