SPB Git
3.8 KB · 60 lines python
1#!/usr/bin/env python32"""Figure ch44 — la « prime verte » dans la littérature : fourchettes publiées par étude (valeurs vérifiées, voir3verification/chapters/ch44-claims.csv) et, en regard, la valeur actuelle des économies des deux mesures du sujet du4cas 1 rapportée à sa valeur hédonique (DONNÉES SYNTHÉTIQUES). Sortie : assets/figures/ch44/ch44-fig-prime-verte.pdf"""5import sys, pathlib6ROOT = pathlib.Path(__file__).resolve().parents[3]7sys.path.insert(0, str(ROOT / "analysis/python")); sys.path.insert(0, str(ROOT / "analysis/python/cases"))8import matplotlib.pyplot as plt9from matplotlib.lines import Line2D10from traite.style import setup, palette, savefig, LARGEUR11import ch44_renovation as cas12from traite import cas11314ETUDES = [15    # (étiquette, bas, haut, point, catégorie)16    ("Brounen et Kok (2011), Pays-Bas :\nétiquette verte (A–C) vs autres", 3.6, 3.7, 3.7, "prix"),17    ("Brounen et Kok (2011), Pays-Bas :\nG vs D … A vs D", -5.0, 10.2, None, "prix"),18    ("Kahn et Kok (2014), Californie :\nmaison étiquetée verte", 4.5, 5.0, 5.0, "prix"),19    ("Hyland et al. (2013), Irlande :\n1 échelon BER … A vs D (prix)", 1.3, 9.3, 9.3, "prix"),20    ("Hyland et al. (2013), Irlande :\n1 échelon … A vs D (loyers)", 0.5, 1.8, 1.8, "loyer"),21    ("Fuerst et al. (2015), Angleterre :\nG vs D … A/B vs D", -6.0, 5.0, None, "prix"),22    ("Aydin et al. (2020), Pays-Bas :\n+10 % d'efficacité mesurée", 2.2, 2.2, 2.2, "prix"),23    ("Cespedes-Lopez et al. (2019), méta-analyse :\nEurope … monde … Amérique", 2.32, 5.36, 4.20, "prix"),24    ("Eichholtz et al. (2010), bureaux É.-U. :\nloyer … prix de vente", 3.0, 16.0, None, "bureaux"),25]26COUL = {"prix": palette.cat[0], "loyer": palette.cat[2], "bureaux": palette.cat[3]}272829def main():30    setup()31    mm = cas.mesures(); d = cas1.charger(); mod = cas1.hedonique(d["ventes"])32    vs = float(cas1.predire(mod, cas1.sujet_df(d["sujet"]))[0])33    va_ab = cas.flux_mesure(mm["AB"])["va_economies"]; va_a = cas.flux_mesure(mm["A"])["va_economies"]34    cout_ab = mm["AB"]["cout"]35    fig, ax = plt.subplots(figsize=(LARGEUR, 4.6))36    n = len(ETUDES)37    for i, (lab, lo, hi, pt, cat) in enumerate(ETUDES):38        y = n - 1 - i; c = COUL[cat]39        ax.plot([lo, hi], [y, y], color=c, lw=3.0, solid_capstyle="round", alpha=0.85)40        if pt is not None: ax.plot([pt], [y], marker="o", ms=6, color=c, mec="white", mew=0.8)41        ax.text(hi + 0.35, y, f"{lo:+.1f} à {hi:+.1f} %".replace(".", ",").replace("-", "−") if lo != hi else f"{hi:+.1f} %".replace(".", ",").replace("-", "−"),42                va="center", ha="left", fontsize=7.5, color=palette.ink)43    # repère du cas 1 : VA des économies rapportée à la valeur hédonique44    for k, (val, lab) in enumerate([(va_ab / vs * 100, "VA des économies\n(A + B) / valeur"), (cout_ab / vs * 100, "coût installé\n(A + B) / valeur")]):45        ax.axvline(val, color=palette.ink2, lw=0.9, ls=":" if k else "--")46        ax.text(val + (0.25 if k else -0.25), n - 0.2, f"Cas 1 : {lab} = {val:.2f} %".replace(".", ","), ha="left" if k else "right", va="bottom", fontsize=7, color=palette.ink2)47    ax.axvline(0, color=palette.ink, lw=0.7)48    ax.set_yticks(range(n)); ax.set_yticklabels([e[0] for e in ETUDES][::-1], fontsize=7.6)49    ax.set_xlim(-8, 22); ax.set_ylim(-0.7, n + 1.2)50    ax.set_xlabel("Écart de prix (ou de loyer) attribué à l'étiquette ou à l'efficacité énergétique, en %")51    ax.grid(axis="y", visible=False)52    leg = [Line2D([0], [0], color=COUL["prix"], lw=3, label="Prix de vente, logements"), Line2D([0], [0], color=COUL["loyer"], lw=3, label="Loyers, logements"),53           Line2D([0], [0], color=COUL["bureaux"], lw=3, label="Bureaux (loyers et prix)")]54    ax.legend(handles=leg, loc="upper right", fontsize=7.5, bbox_to_anchor=(1.0, 0.86))55    out = savefig(fig, "ch44/ch44-fig-prime-verte.pdf"); print("OK", out)565758if __name__ == "__main__":59    main()60
Files · cd76781f94cbc7113926bd8a4bd920d14c17c982
Menu

Theme