HOWTO · Matplotlib
Ajouter du texte à l'intérieur du tracé dans Matplotlib
Ce tutoriel montre comment utiliser la fonction `matplotlib.pyplot.text()` pour ajouter du texte à un graphique Matplotlib.
Sur cette page
Utilisez matplotlib.pyplot.text() pour placer une étiquette ou une note à l’endroit de votre choix dans un graphique Matplotlib. La fonction prend les coordonnées x et y, puis la chaîne à afficher ; des arguments facultatifs permettent de régler l’apparence du texte. Par exemple, plt.text(2, 20, "Peak point") place une étiquette aux coordonnées de données (2, 20). Avec un objet axes, l’appel équivalent est ax.text(2, 20, "Peak point"). Consultez la référence de l’API pyplot.text() pour obtenir la liste complète des paramètres. Les exemples de code restent inchangés ; leurs étiquettes, comme « Peak point », sont donc en anglais.
Utiliser matplotlib.pyplot.text() pour ajouter du texte à un graphique
L’exemple suivant trace une ligne et place une étiquette sur l’un de ses points de données. Il utilise l’interface pyplot et définit la plage affichée de façon à inclure les coordonnées choisies.
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y = [10, 15, 25, 30]
plt.plot(x, y, marker="o")
plt.xlim(0, 5)
plt.ylim(0, 35)
plt.text(3, 25, "Peak point", fontsize=12, color="crimson")
plt.title("A labeled line plot")
plt.xlabel("X")
plt.ylabel("Y")
plt.show()
x et y contiennent les données tracées, et l’appel place « Peak point » aux coordonnées (3, 25). Les deux appels qui définissent les limites incluent ces coordonnées dans la plage visible. Dans un script qui crée plusieurs graphiques, ax.text(x, y, label) associe le texte à un objet axes précis et indique clairement quel graphique le reçoit. L’appel pyplot est pratique pour le graphique courant lorsqu’il n’y en a qu’un.
Positionner le texte avec les coordonnées de données et les limites des axes
Par défaut, les arguments x et y de text() utilisent les coordonnées de données. Une étiquette placée en (3, 25) suit donc ces valeurs sur le graphique ; sa position ne dépend pas de la distance en pixels par rapport à un coin. Les limites actuelles des axes x et y déterminent quelle partie du plan des coordonnées de données est visible. Si la position demandée se trouve en dehors de ces limites, le texte reste hors de la zone de tracé visible. Définissez des limites adaptées avec plt.xlim() et plt.ylim(), ou avec ax.set_xlim() et ax.set_ylim() si vous utilisez un objet axes.
Choisissez une position qui laisse l’étiquette lisible sans masquer des données importantes. Pour qu’une note reste à une fraction fixe des axes, indépendamment des valeurs des données, utilisez les coordonnées des axes avec transform=ax.transAxes : (0, 0) correspond au coin inférieur gauche et (1, 1) au coin supérieur droit des axes. Ces coordonnées diffèrent des coordonnées de données utilisées par défaut et sont utiles pour ancrer une légende dans le graphique.
Personnaliser l’apparence du texte
Passez des arguments nommés à text() pour mettre une étiquette en forme. fontsize modifie sa taille, color définit sa couleur et fontweight="bold" la met en évidence. Utilisez rotation pour incliner le texte, ainsi que horizontalalignment (ou ha) et verticalalignment (ou va) pour l’aligner par rapport à ses coordonnées x et y. Par exemple, ha="center" et va="bottom" centrent une étiquette au-dessus d’un point.
L’argument bbox ajoute un arrière-plan derrière le texte, ce qui peut le détacher d’une ligne ou d’un marqueur visuellement chargé. Il accepte un dictionnaire de propriétés de patch. Cet exemple compact combine l’alignement, la mise en évidence, la rotation et un fond blanc translucide :
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [2, 4, 3], marker="o")
ax.text(2, 4, "Peak", fontsize=12, color="crimson", fontweight="bold",
ha="center", va="bottom", rotation=15,
bbox={"facecolor": "white", "alpha": 0.8})
plt.close(fig)
Par exemple, bbox={"facecolor": "white", "alpha": 0.8} crée un fond blanc partiellement transparent. N’utilisez que les options qui améliorent la lisibilité : des couleurs vives, une grande taille de police ou une rotation appliquées partout peuvent détourner l’attention des données.
Ajouter des annotations et du texte sur plusieurs lignes
Utilisez plt.annotate() lorsqu’une note doit pointer vers un élément du graphique. Son argument xy indique le point de données décrit, tandis que xytext définit la position du texte. Par exemple, plt.annotate("Peak", xy=(3, 25), xytext=(2, 30), arrowprops={"arrowstyle": "->"}) place une note au-dessus du point et trace une flèche vers celui-ci. Par défaut, la position du texte de l’annotation utilise elle aussi les coordonnées de données ; choisissez des limites qui englobent le point visé et la note. Avec un objet axes, utilisez ax.annotate() pour associer le point et la note au graphique voulu.
Pour afficher une note sur plusieurs lignes, insérez des caractères de nouvelle ligne dans la chaîne passée à text(), par exemple "First line\nSecond line". Matplotlib affiche chaque segment sur sa propre ligne à la position choisie. Une étiquette sur plusieurs lignes permet de donner une explication concise ; ajustez sa position et son alignement pour qu’elle reste dans la zone visible sans masquer les données voisines. Ces techniques permettent d’ajouter des étiquettes, du contexte et des flèches, tout en reliant chaque note aux coordonnées ou à l’élément qu’elle décrit.