SPB Git
2.0 KB · 36 lines python
1#!/usr/bin/env python32"""Figure ch07 — ventes appariées : prix sans et avec servitude de passage pour 12 paires (DONNÉES SYNTHÉTIQUES, graine 20261031).3Sortie : assets/figures/ch07/ch07-fig-paires-servitude.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 numpy as np, matplotlib.pyplot as plt8from traite.style import setup, palette, savefig, LARGEUR, fmt_dollars9import ch07_servitudes_copro as cas1011def main():12    setup()13    p = cas.paires_servitude()14    ordre = np.argsort(p["sans"])15    sans, avec = p["sans"][ordre], p["avec"][ordre]16    y = np.arange(len(sans))17    fig, ax = plt.subplots(figsize=(LARGEUR, 3.6))18    for yi, s, a in zip(y, sans, avec):19        ax.plot([a, s], [yi, yi], color=palette.grid, lw=2.2, zorder=1)20    ax.scatter(sans, y, color=palette.cat[0], s=34, zorder=3, label="Lot sans servitude (fonds libre)")21    ax.scatter(avec, y, color=palette.cat[1], s=34, zorder=3, marker="D", label="Lot grevé d'une servitude de passage")22    for yi, s, a in zip(y, sans, avec):23        ax.text(s + 4000, yi, f"{a - s:+,.0f} $".replace(",", " "), va="center", ha="left", fontsize=7.5, color=palette.ink2)24    ax.set_yticks(y); ax.set_yticklabels([f"paire {int(i) + 1}" for i in ordre])25    ax.xaxis.set_major_formatter(plt.FuncFormatter(fmt_dollars))26    ax.set_xlim(avec.min() - 15000, sans.max() + 60000)27    ax.set_xlabel("Prix de vente (dollars de 2026, données synthétiques)")28    ax.grid(axis="y", visible=False)29    ax.set_title((f"Différence moyenne {p['moyenne']:,.0f} \\$ (IC 95 % : {p['ic95'][0]:,.0f} à {p['ic95'][1]:,.0f} \\$)@ soit {p['effet_relatif_moyen']*100:.1f} % du prix").replace(",", " ").replace(".", ",").replace("@", ","),30                 loc="left", fontsize=8.5)31    ax.legend(loc="lower right", fontsize=7.5)32    out = savefig(fig, "ch07/ch07-fig-paires-servitude.pdf"); print("OK", out)3334if __name__ == "__main__":35    main()36
Files · dfd0c291e81581841a9798b3fcf4f3f303e56b99
Menu

Theme