SPB Git
2.6 KB · 41 lines python
1#!/usr/bin/env python32"""Figure ch24 — composantes de courte durée du sujet du cas 1 : coût neuf et dépréciation ventilée par composante3(fiche d'état du ch. 11, DONNÉES SYNTHÉTIQUES, graine 20261031). Sortie : assets/figures/ch24/ch24-fig-composantes.pdf"""4import sys, pathlib5ROOT = pathlib.Path(__file__).resolve().parents[3]6sys.path.insert(0, str(ROOT / "analysis/python")); sys.path.insert(0, str(ROOT / "analysis/python/cases"))7import matplotlib.pyplot as plt8from matplotlib.patches import Patch9from traite.style import setup, palette, savefig, LARGEUR, fmt_dollars10import ch24_depreciation as cas111213def main():14    setup()15    d = cas.charger()16    var = cas.variantes_physique(d["cn"], d["fiche"], d["travaux"])17    ve = var["ventilee"]; f = d["fiche"].set_index("composante")18    noms = list(ve["courte_duree"].keys())19    couts = [float(f.loc[n, "cout_neuf"]) for n in noms]; deps = [ve["courte_duree"][n] for n in noms]20    ordre = sorted(range(len(noms)), key=lambda i: couts[i])21    fig, ax = plt.subplots(figsize=(LARGEUR, 4.3))22    y = list(range(len(ordre)))23    ax.barh(y, [couts[i] for i in ordre], color=palette.seq[0], height=0.7)24    ax.barh(y, [deps[i] for i in ordre], color=palette.cat[1], height=0.7)25    etiquettes = [n.replace(" (brique et fibrociment)", "").replace(" (entrée 200 A, filage cuivre, éclairage)", "").replace(" (PVC, double vitrage)", " (PVC)")26                  .replace("Ventilateur récupérateur de chaleur (VRC)", "VRC").replace(" (2 salles de bain)", "").replace(" (bardeaux d'asphalte)", "") for n in noms]27    ax.set_yticks(y); ax.set_yticklabels([etiquettes[i] for i in ordre], fontsize=7.5)28    for k, i in enumerate(ordre):29        ax.text(couts[i] + 500, k, f"{fmt_dollars(deps[i])} ({deps[i]/couts[i]*100:.0f} %)".replace("$", r"\$"), va="center", fontsize=7, color=palette.ink)30    ax.set_xlim(0, max(couts) * 1.35); ax.xaxis.set_major_formatter(plt.FuncFormatter(fmt_dollars))31    ax.set_xlabel("Coût neuf de la composante (dollars de 2026) et dépréciation imputée"); ax.grid(axis="y", visible=False)32    tot_c = sum(couts); tot_d = sum(deps)33    ax.set_title(f"18 composantes : coût neuf {fmt_dollars(tot_c)}, dépréciation {fmt_dollars(tot_d)} ({tot_d/tot_c*100:.1f} %)".replace("$", r"\$"), loc="left", fontsize=8.5)34    ax.legend(handles=[Patch(color=palette.seq[0], label="Coût neuf (devis majoré)"), Patch(color=palette.cat[1], label="Dépréciation (âge effectif / vie utile)")],35              loc="lower right", fontsize=7.5)36    out = savefig(fig, "ch24/ch24-fig-composantes.pdf"); print("OK", out)373839if __name__ == "__main__":40    main()41
Files · 0b0a78499997700c9aa16d44b91243a1ef46c0bb
Menu

Theme