Corrige le texte qui débordait des boîtes dans les schémas, et l'en-tête des PDF
toile() laissait les marges par défaut de matplotlib : une unité valait ~0,78 cm au lieu de 1 cm, les boîtes étaient donc trop petites pour leur texte. Les axes occupent désormais toute la figure, et boite() réduit la police si le texte dépasse encore (ajuster_texte). En-tête et pied de page : grille et align() à la place de #h(1fr), neutralisé par le préambule de Quarto (titre renvoyé à la ligne, numéro de page à gauche). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
379cd03bc5
commit
170588dc2c
+18
-3
@@ -12,7 +12,8 @@ CLAIR = { # fonds pâles associés aux couleurs de la charte
|
||||
|
||||
def toile(largeur_cm, hauteur_cm, xmax=None, ymax=None):
|
||||
"""Figure sans axes, en coordonnées « cm » (1 unité = 1 cm à l'échelle d'origine)."""
|
||||
fig, ax = plt.subplots(figsize=(largeur_cm * CM, hauteur_cm * CM))
|
||||
fig = plt.figure(figsize=(largeur_cm * CM, hauteur_cm * CM))
|
||||
ax = fig.add_axes((0, 0, 1, 1)) # pas de marges : 1 unité = 1 cm, police et boîtes à la même échelle
|
||||
ax.set_xlim(0, xmax or largeur_cm)
|
||||
ax.set_ylim(0, ymax or hauteur_cm)
|
||||
ax.set_aspect("equal")
|
||||
@@ -27,12 +28,26 @@ def boite(ax, x, y, l, h, texte="", couleur=BLEU, taille=9, gras=False, fond=Non
|
||||
boxstyle=f"{style},pad=0,rounding_size=0.15" if style == "round" else style,
|
||||
facecolor=fond, edgecolor=couleur, linewidth=1.4, alpha=alpha))
|
||||
if texte:
|
||||
ax.text(x, y, texte, ha="center", va="center", fontsize=taille, color=ENCRE,
|
||||
fontweight="bold" if gras else "normal", linespacing=1.3)
|
||||
t = ax.text(x, y, texte, ha="center", va="center", fontsize=taille, color=ENCRE,
|
||||
fontweight="bold" if gras else "normal", linespacing=1.3)
|
||||
ajuster_texte(ax, t, l, h)
|
||||
return {"c": (x, y), "g": (x - l / 2, y), "d": (x + l / 2, y),
|
||||
"h": (x, y + h / 2), "b": (x, y - h / 2)}
|
||||
|
||||
|
||||
def ajuster_texte(ax, t, l, h, marge=0.86, taille_min=5.5):
|
||||
"""Réduit la police du texte t jusqu'à ce qu'il tienne dans une boîte l × h (unités de données)."""
|
||||
rendu = ax.figure.canvas.get_renderer()
|
||||
ax.apply_aspect() # sinon la mise à l'échelle « equal » n'est appliquée qu'au rendu final
|
||||
(x0, y0), (x1, y1) = ax.transData.transform([(0, 0), (l, h)])
|
||||
largeur_max, hauteur_max = abs(x1 - x0) * marge, abs(y1 - y0) * marge
|
||||
while t.get_fontsize() > taille_min:
|
||||
ext = t.get_window_extent(rendu)
|
||||
if ext.width <= largeur_max and ext.height <= hauteur_max:
|
||||
break
|
||||
t.set_fontsize(t.get_fontsize() * 0.95)
|
||||
|
||||
|
||||
def fleche(ax, depart, arrivee, texte="", couleur=ENCRE, taille=8, double=False, pointille=False,
|
||||
cote="haut", decalage=0.18, courbe=0, fond=False):
|
||||
"""Flèche entre deux points, avec étiquette optionnelle au milieu.
|
||||
|
||||
Reference in New Issue
Block a user