Matplotlib est une puissante bibliothèque Python pour créer des visualisations. Cependant, lorsque l’on travaille avec plusieurs sous-tracés, la gestion des légendes peut devenir complexe. Cet article propose des méthodes efficaces pour créer une seule légende unifiée pour tous vos sous-tracés.
Table des matières
- Comprendre les sous-tracés dans Matplotlib
- Méthode 1 : Utilisation de
fig.legend()
- Méthode 2 : Personnalisation du placement et de l’apparence de la légende
- Méthode 3 : Gestion de plusieurs lignes par sous-tracé
- Conclusion
- FAQ
Comprendre les sous-tracés dans Matplotlib
Les sous-tracés organisent plusieurs tracés au sein d’une seule figure. Dans Matplotlib, vous les créez à l’aide de matplotlib.pyplot.subplots()
, qui renvoie un objet figure et un tableau d’objets axes (un par sous-tracé).
import matplotlib.pyplot as plt
fig, axes = plt.subplots(2, 2) # Grille 2x2 de sous-tracés
# Tracer des données sur chaque sous-tracé
axes[0, 0].plot([1, 2, 3], [4, 5, 6], label='Ligne 1')
axes[0, 1].plot([1, 2, 3], [7, 8, 9], label='Ligne 2')
axes[1, 0].plot([1, 2, 3], [10, 11, 12], label='Ligne 1')
axes[1, 1].plot([1, 2, 3], [13, 14, 15], label='Ligne 2')
plt.show()
Cela crée une grille 2×2, chacune avec sa propre légende. Nous allons les regrouper en une seule légende.
Méthode 1 : Utilisation de fig.legend()
L’approche la plus simple utilise la méthode legend()
de l’objet figure. Cela nécessite de collecter toutes les poignées et les étiquettes de la légende.
import matplotlib.pyplot as plt
fig, axes = plt.subplots(2, 2)
lines1, = axes[0, 0].plot([1, 2, 3], [4, 5, 6], label='Ligne 1')
lines2, = axes[0, 1].plot([1, 2, 3], [7, 8, 9], label='Ligne 2')
lines3, = axes[1, 0].plot([1, 2, 3], [10, 11, 12], label='Ligne 1')
lines4, = axes[1, 1].plot([1, 2, 3], [13, 14, 15], label='Ligne 2')
# Collecter les poignées et les étiquettes uniques
handles = [lines1, lines2]
labels = [h.get_label() for h in handles]
fig.legend(handles, labels, loc='upper right')
plt.show()
Remarque : Nous n’utilisons que des poignées uniques pour éviter les doublons dans la légende. loc
spécifie la position de la légende.
Méthode 2 : Personnalisation du placement et de l’apparence de la légende
Vous pouvez personnaliser l’emplacement, la bordure, la taille de la police et plus encore de la légende.
import matplotlib.pyplot as plt
# ... (code de tracé de la méthode 1) ...
fig.legend(handles, labels, loc='lower center', bbox_to_anchor=(0.5, -0.1), ncol=2, frameon=True, fontsize=12)
plt.show()
Ici, nous avons positionné la légende en bas au centre, ajusté la position verticale avec bbox_to_anchor
, utilisé deux colonnes (ncol=2
), ajouté une bordure (frameon=True
) et augmenté la taille de la police.
Méthode 3 : Gestion de plusieurs lignes par sous-tracé
Pour plusieurs lignes au sein d’un sous-tracé, collectez toutes les poignées et étiquettes pertinentes.
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
line1, = ax.plot([1, 2, 3], [4, 5, 6], label='Ligne 1')
line2, = ax.plot([1, 2, 3], [7, 8, 9], label='Ligne 2')
line3, = ax.plot([1, 2, 3], [10, 11, 12], label='Ligne 3')
fig.legend([line1, line2, line3], [line1.get_label(), line2.get_label(), line3.get_label()], loc='best')
plt.show()
Conclusion
La création d’une seule légende pour tous les sous-tracés améliore la clarté et la lisibilité de vos visualisations Matplotlib. Les méthodes présentées ci-dessus, utilisant fig.legend()
et une gestion appropriée des poignées/étiquettes, offrent un contrôle sur le placement et l’apparence de la légende.
FAQ
- Q : Que se passe-t-il si j’ai différents styles de lignes ? R : La légende reflétera automatiquement ces différences.
- Q : Puis-je utiliser différentes couleurs pour la même étiquette ? R : Oui, mais la légende n’affichera qu’une seule couleur par étiquette. Utilisez des étiquettes distinctes pour les différencier.
- Q : Ma légende chevauche les tracés. R : Ajustez
bbox_to_anchor
,loc
, la taille de la police ou la taille de la figure.