#!/usr/bin/env python3 """Figure ch44 — la « prime verte » dans la littérature : fourchettes publiées par étude (valeurs vérifiées, voir verification/chapters/ch44-claims.csv) et, en regard, la valeur actuelle des économies des deux mesures du sujet du cas 1 rapportée à sa valeur hédonique (DONNÉES SYNTHÉTIQUES). Sortie : assets/figures/ch44/ch44-fig-prime-verte.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 matplotlib.pyplot as plt from matplotlib.lines import Line2D from traite.style import setup, palette, savefig, LARGEUR import ch44_renovation as cas from traite import cas1 ETUDES = [ # (étiquette, bas, haut, point, catégorie) ("Brounen et Kok (2011), Pays-Bas :\nétiquette verte (A–C) vs autres", 3.6, 3.7, 3.7, "prix"), ("Brounen et Kok (2011), Pays-Bas :\nG vs D … A vs D", -5.0, 10.2, None, "prix"), ("Kahn et Kok (2014), Californie :\nmaison étiquetée verte", 4.5, 5.0, 5.0, "prix"), ("Hyland et al. (2013), Irlande :\n1 échelon BER … A vs D (prix)", 1.3, 9.3, 9.3, "prix"), ("Hyland et al. (2013), Irlande :\n1 échelon … A vs D (loyers)", 0.5, 1.8, 1.8, "loyer"), ("Fuerst et al. (2015), Angleterre :\nG vs D … A/B vs D", -6.0, 5.0, None, "prix"), ("Aydin et al. (2020), Pays-Bas :\n+10 % d'efficacité mesurée", 2.2, 2.2, 2.2, "prix"), ("Cespedes-Lopez et al. (2019), méta-analyse :\nEurope … monde … Amérique", 2.32, 5.36, 4.20, "prix"), ("Eichholtz et al. (2010), bureaux É.-U. :\nloyer … prix de vente", 3.0, 16.0, None, "bureaux"), ] COUL = {"prix": palette.cat[0], "loyer": palette.cat[2], "bureaux": palette.cat[3]} def main(): setup() mm = cas.mesures(); d = cas1.charger(); mod = cas1.hedonique(d["ventes"]) vs = float(cas1.predire(mod, cas1.sujet_df(d["sujet"]))[0]) va_ab = cas.flux_mesure(mm["AB"])["va_economies"]; va_a = cas.flux_mesure(mm["A"])["va_economies"] cout_ab = mm["AB"]["cout"] fig, ax = plt.subplots(figsize=(LARGEUR, 4.6)) n = len(ETUDES) for i, (lab, lo, hi, pt, cat) in enumerate(ETUDES): y = n - 1 - i; c = COUL[cat] ax.plot([lo, hi], [y, y], color=c, lw=3.0, solid_capstyle="round", alpha=0.85) if pt is not None: ax.plot([pt], [y], marker="o", ms=6, color=c, mec="white", mew=0.8) ax.text(hi + 0.35, y, f"{lo:+.1f} à {hi:+.1f} %".replace(".", ",").replace("-", "−") if lo != hi else f"{hi:+.1f} %".replace(".", ",").replace("-", "−"), va="center", ha="left", fontsize=7.5, color=palette.ink) # repère du cas 1 : VA des économies rapportée à la valeur hédonique 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")]): ax.axvline(val, color=palette.ink2, lw=0.9, ls=":" if k else "--") 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) ax.axvline(0, color=palette.ink, lw=0.7) ax.set_yticks(range(n)); ax.set_yticklabels([e[0] for e in ETUDES][::-1], fontsize=7.6) ax.set_xlim(-8, 22); ax.set_ylim(-0.7, n + 1.2) ax.set_xlabel("Écart de prix (ou de loyer) attribué à l'étiquette ou à l'efficacité énergétique, en %") ax.grid(axis="y", visible=False) 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"), Line2D([0], [0], color=COUL["bureaux"], lw=3, label="Bureaux (loyers et prix)")] ax.legend(handles=leg, loc="upper right", fontsize=7.5, bbox_to_anchor=(1.0, 0.86)) out = savefig(fig, "ch44/ch44-fig-prime-verte.pdf"); print("OK", out) if __name__ == "__main__": main()