Data Visualization

Maîtriser les légendes Matplotlib : créer une légende unifiée pour tous les sous-graphiques

Spread the love

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

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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *