SPB Git
4.2 KB · 59 lines python
1#!/usr/bin/env python32"""Figure ch11 — frise INDICATIVE des pathologies et matériaux à risque selon la période de construction (Québec).3Les bornes de périodes sont des repères de connaissances générales du métier (matériaux en usage, dates d'interdiction4ou de normalisation) et non des statistiques : elles sont arrondies et signalées comme indicatives dans la légende.5Les seules dates vérifiées sur une source publique sont marquées « (v) » dans le libellé : interdiction de la MIUF (déc. 1980,6RNCan), interdiction de l'amiante (30 déc. 2018, Canada.ca), vermiculite Libby/Zonolite 1920-1990 (RNCan), fin du Programme7pyrrhotite (30 sept. 2026, Québec.ca), Code de construction fondé sur le CNB 2020 modifié Québec (17 avril 2025, RBQ).8Sortie : assets/figures/ch11/ch11-fig-frise-pathologies.pdf"""9import sys, pathlib10ROOT = pathlib.Path(__file__).resolve().parents[3]11sys.path.insert(0, str(ROOT / "analysis/python"))12import matplotlib.pyplot as plt13from traite.style import setup, palette, savefig, LARGEUR1415# (libellé, début, fin, famille) — période pendant laquelle le matériau ou la pratique à risque était couramment mis en place16FRISE = [17    ("Plomberie d'alimentation en acier galvanisé", 1900, 1960, "Plomberie"),18    ("Entrées d'eau en plomb (petits diamètres)", 1900, 1955, "Plomberie"),19    ("Fils électriques à boutons et tubes ; fusibles", 1900, 1950, "Électricité"),20    ("Isolants contenant de l'amiante (tuyaux, plâtre, carreaux) — interdiction 2018 (v)", 1920, 1985, "Isolation et air intérieur"),21    ("Vermiculite Zonolite (mine de Libby) — vente 1920-1990 (v)", 1920, 1990, "Isolation et air intérieur"),22    ("Réservoirs de mazout souterrains ou extérieurs d'origine", 1945, 1980, "Chauffage"),23    ("Filage de cuivre sans mise à la terre (deux fils)", 1945, 1962, "Électricité"),24    ("Filage d'aluminium (circuits de dérivation)", 1965, 1976, "Électricité"),25    ("Mousse isolante d'urée-formaldéhyde (MIUF) — interdite déc. 1980 (v)", 1970, 1980, "Isolation et air intérieur"),26    ("Remblai sous dalle susceptible de contenir de la pyrite (région de Montréal)", 1970, 1999, "Fondations et sols"),27    ("Tuyauterie de polybutylène (gris)", 1978, 1995, "Plomberie"),28    ("Fenêtres à simple vitrage ou à châssis de bois non étanches", 1900, 1980, "Enveloppe"),29    ("Toitures et drains français sans membrane ni cheminées de nettoyage (ocre)", 1900, 1995, "Fondations et sols"),30    ("Granulats à pyrrhotite dans le béton (Mauricie) — programme SHQ clos le 30 sept. 2026 (v)", 1996, 2008, "Fondations et sols"),31    ("Pare-vapeur et pare-air déficients, condensation dans les combles", 1975, 1995, "Enveloppe"),32    ("Construction sous le chapitre I fondé sur le CNB 2020 modifié Québec (v)", 2025, 2026, "Normes"),33]34FAMILLES = ["Fondations et sols", "Enveloppe", "Isolation et air intérieur", "Plomberie", "Électricité", "Chauffage", "Normes"]353637def main():38    setup()39    coul = {f: palette.cat[i % len(palette.cat)] for i, f in enumerate(FAMILLES)}40    ordre = sorted(FRISE, key=lambda r: (FAMILLES.index(r[3]), r[1]))41    fig, ax = plt.subplots(figsize=(LARGEUR, 4.6))42    for k, (lib, d, f_, fam) in enumerate(ordre):43        ax.barh(k, f_ - d, left=d, height=0.62, color=coul[fam], alpha=0.9)44        ax.text(d - 1, k, lib, ha="right", va="center", fontsize=6.6, color=palette.ink)45    ax.set_yticks([]); ax.set_ylim(-0.7, len(ordre) - 0.3); ax.invert_yaxis()46    ax.set_xlim(1900, 2030); ax.set_xticks(range(1900, 2031, 10))47    ax.set_xlabel("Période de construction ou de mise en place (repères indicatifs, arrondis à la décennie sauf dates (v) vérifiées)")48    ax.axvline(1998, color=palette.brand, lw=0.9, ls="--"); ax.text(1998.5, -0.45, "sujet cas 1 : 1998", fontsize=7, color=palette.brand, va="center")49    ax.grid(axis="y", visible=False)50    from matplotlib.patches import Patch51    ax.legend(handles=[Patch(color=coul[f], label=f) for f in FAMILLES], loc="lower left", ncol=4, fontsize=6.6, bbox_to_anchor=(-0.95, -0.26), frameon=False)52    for s in ("left",): ax.spines[s].set_visible(False)53    fig.tight_layout()54    out = savefig(fig, "ch11/ch11-fig-frise-pathologies.pdf"); print("OK", out)555657if __name__ == "__main__":58    main()59
Files · cb0963bad540f93d1e0e011172cab614d30348ad
Menu

Theme