SPB Git
2.0 KB · 35 lines python
1#!/usr/bin/env python32"""Ch. 30, figure « surface » : valeur DCF du cas 3 (DONNÉES SYNTHÉTIQUES) selon le taux d'actualisation r (lignes) et le3taux de capitalisation terminal R_T (colonnes). Sortie : ch30-fig-surface.pdf."""4from __future__ import annotations5import sys, pathlib6sys.path.insert(0, str(pathlib.Path(__file__).resolve().parents[1]))7import numpy as np, matplotlib.pyplot as plt8from matplotlib.patches import Rectangle9from traite.style import setup, palette, savefig, LARGEUR10from cases import ch30_dcf as c1112def main():13    setup()14    r = c.base(); S = c.surface_r_Rt(r); h = r["hyp"]15    M = S.values / 100016    fig, ax = plt.subplots(figsize=(LARGEUR, 3.9))17    im = ax.imshow(M, cmap=palette.cmap_seq(), aspect="auto", origin="upper")18    ax.set_xticks(range(len(S.columns))); ax.set_xticklabels([f"{x*100:.2f}".replace(".", ",") for x in S.columns])19    ax.set_yticks(range(len(S.index))); ax.set_yticklabels([f"{x*100:.2f}".replace(".", ",") for x in S.index])20    ax.set_xlabel("Taux de capitalisation terminal $R_T$ (%)"); ax.set_ylabel("Taux d'actualisation $r$ (%)")21    ax.grid(False)22    vmin, vmax = M.min(), M.max()23    for i in range(M.shape[0]):24        for j in range(M.shape[1]):25            v = M[i, j]; col = "white" if (v - vmin) / (vmax - vmin) > 0.45 else palette.ink26            ax.text(j, i, f"{v:,.0f}".replace(",", " "), ha="center", va="center", fontsize=7, color=col)27    i0 = int(np.argmin([abs(x - h["taux_actualisation"]) for x in S.index])); j0 = int(np.argmin([abs(x - h["taux_terminal"]) for x in S.columns]))28    ax.add_patch(Rectangle((j0 - 0.5, i0 - 0.5), 1, 1, fill=False, ec=palette.cat[1], lw=2))29    ax.text(j0, i0 - 0.62, "base", ha="center", va="bottom", fontsize=7.5, color=palette.cat[1], fontweight="bold")30    cb = fig.colorbar(im, ax=ax, fraction=0.035, pad=0.02); cb.set_label("Valeur $V_0$ (milliers de \\$)"); cb.outline.set_visible(False)31    savefig(fig, "ch30/ch30-fig-surface.pdf")3233if __name__ == "__main__":34    main()35
Files · 8dfc6ca7769188d087f58c82e02a063bfba99ae6
Menu

Theme