SPB Git
2.5 KB · 37 lines python
1#!/usr/bin/env python32"""Ch. 31, figure « service-dette » (DONNÉES SYNTHÉTIQUES, cas 3) : service de la dette annuel du prêt de 1 475 959 $ et ratio de3couverture sur le RNE de l'année 1 (89 956 $) en fonction du taux nominal (composition semestrielle), pour des amortissements de425, 30 et 40 ans ; repères : taux de base 4,12 %, seuil RCD 1,20 et 1,00. Sortie : ch31-fig-service-dette.pdf."""5from __future__ import annotations6import sys, pathlib7sys.path.insert(0, str(pathlib.Path(__file__).resolve().parents[1]))8import numpy as np, matplotlib.pyplot as plt9from traite.style import setup, palette, savefig, LARGEUR10from cases import ch31_financement as c1112def main():13    setup()14    r = c.base(); fi = c.financement(r)15    s = c.sensibilite_service_dette(r, taux=np.arange(0.03, 0.0801, 0.001))16    fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(LARGEUR, 3.0))17    for k, (n, lab) in enumerate(((480, "40 ans"), (360, "30 ans"), (300, "25 ans"))):18        d = s[s["amortissement_mois"] == n]19        ax1.plot(d["taux"] * 100, d["service_dette"] / 1000, color=palette.cat[k], lw=1.6, label=f"amortissement {lab}")20        ax2.plot(d["taux"] * 100, d["rcd_1"], color=palette.cat[k], lw=1.6, label=f"amortissement {lab}")21    for ax in (ax1, ax2):22        ax.axvline(4.12, color=palette.ink2, lw=0.8, ls="--"); ax.set_xlabel("Taux nominal, composition semestrielle (%)"); ax.set_xlim(3, 8)23    ax1.text(4.2, 53, "taux de base 4,12 %", fontsize=7.5, color=palette.ink)24    ax1.axhline(fi["rne_1"] / 1000, color=palette.cat[1], lw=0.8, ls=":"); ax1.text(6.6, fi["rne_1"] / 1000 + 2, "RNE$_1$ = 89 956 $", fontsize=7.5, color=palette.ink)25    ax1.plot([4.12], [fi["service_dette"] / 1000], "o", color=palette.cat[0], ms=4.5)26    ax1.set_ylabel("Service de la dette (milliers de $/an)"); ax1.set_ylim(50, 150); ax1.legend(loc="upper left", fontsize=7.2, bbox_to_anchor=(0.0, 1.0))27    ax1.set_title("Service de la dette du prêt retenu", loc="left")28    ax2.axhline(1.20, color=palette.cat[1], lw=0.8, ls=":"); ax2.text(6.4, 1.22, "RCD minimal 1,20", fontsize=7.5, color=palette.ink)29    ax2.axhline(1.00, color=palette.ink2, lw=0.8, ls=":"); ax2.text(6.4, 1.02, "RCD 1,00 (point mort)", fontsize=7.5, color=palette.ink)30    ax2.plot([4.12], [1.20], "o", color=palette.cat[0], ms=4.5)31    ax2.set_ylabel("Ratio de couverture, année 1"); ax2.set_ylim(0.6, 1.5)32    ax2.set_title("Couverture de la dette", loc="left")33    savefig(fig, "ch31/ch31-fig-service-dette.pdf")3435if __name__ == "__main__":36    main()37
Files · 2eb2bf4e67f754808bae5090a9e53eab37149ddb
Menu

Theme