Dans le domaine de la visualisation de données, une légende est un élément crucial pour l'interprétation des représentations graphiques. Elle guide le spectateur dans la compréhension des données et de la signification des divers éléments visuels présentés. Matplotlib, une bibliothèque Python largement utilisée, offre des fonctionnalités robustes pour la création de visualisations, y compris des graphiques dotés de légendes informatives. Ce guide explore en profondeur la création et la personnalisation des légendes dans Matplotlib, en s'appuyant sur des exemples concrets et des options de configuration avancées.

L'Essentiel des Légendes Matplotlib
Une légende dans Matplotlib sert de clé de décodage pour les éléments d'un graphique. Elle associe des identifiants textuels à des éléments graphiques spécifiques, tels que des lignes, des points ou des surfaces, permettant ainsi une distinction claire et une compréhension immédiate des données représentées. Sans légende, un graphique complexe peut devenir ambigu et difficile à interpréter.
Importation des Bibliothèques Nécessaires
Avant de pouvoir créer des graphiques et des légendes, il est indispensable d'importer les bibliothèques Python requises. Les plus couramment utilisées pour la visualisation de données sont Matplotlib et NumPy. NumPy est souvent utilisé pour la génération et la manipulation de données numériques.
import matplotlib.pyplot as pltimport numpy as npParfois, dans des environnements comme Jupyter Notebook, il peut être nécessaire d'attendre quelques secondes que le notebook ait fini de charger les éléments nécessaires.
Génération de Données pour l'Exemple
Pour illustrer la création de légendes, nous allons générer des données factices. Nous utiliserons la fonction arange de NumPy pour créer deux tableaux, a et b, qui serviront de base à nos tracés.
a = np.arange(0, 10, 0.2)b = np.exp(a)Création de Graphiques avec des Étiquettes
La première étape pour obtenir une légende est d'associer des étiquettes aux éléments graphiques que nous allons tracer. Dans Matplotlib, la fonction plot permet de tracer des lignes, et l'argument label est utilisé pour spécifier le texte qui apparaîtra dans la légende pour cette ligne particulière.
Tracer Plusieurs Lignes avec des Étiquettes
Nous pouvons tracer plusieurs lignes sur le même graphique. Pour chaque ligne, nous attribuons une étiquette descriptive en utilisant le paramètre label.
plt.plot(a, b, label='Exponentielle')plt.plot(a, b[::-1], label='Exponentielle Inversée') # b[::-1] inverse le tableau bplt.plot(a, a*2, label='Linéaire x2')Dans cet exemple, nous avons tracé trois lignes distinctes. La première représente une fonction exponentielle, la deuxième son inverse, et la troisième une fonction linéaire. Chaque ligne possède une étiquette unique qui sera utilisée pour construire la légende.
Ajout et Personnalisation de la Légende
Une fois les éléments tracés avec leurs étiquettes, l'étape suivante consiste à ajouter la légende au graphique. Matplotlib offre une fonction dédiée, plt.legend(), pour accomplir cette tâche. Cette fonction permet non seulement d'afficher la légende, mais aussi de la personnaliser de diverses manières.
La Fonction plt.legend()
L'appel le plus simple à plt.legend() suffit généralement à afficher une légende basée sur les étiquettes définies lors du traçage des éléments. Matplotlib détectera automatiquement les étiquettes et créera la légende correspondante.
plt.legend()Options de Placement de la Légende
L'emplacement de la légende sur le graphique est un paramètre important pour éviter de masquer des données essentielles. Le paramètre loc de la fonction plt.legend() permet de spécifier cet emplacement. Il peut prendre diverses valeurs, soit des chaînes de caractères prédéfinies, soit des codes numériques.
Quelques valeurs courantes pour loc :
'best'(le défaut, Matplotlib essaie de trouver le meilleur emplacement)'upper right''upper left''lower left''lower right''right''center left''center right''lower center''upper center''center'
Il est également possible de spécifier la position de manière plus précise en utilisant bbox_to_anchor en combinaison avec loc. bbox_to_anchor définit une zone de référence, et loc spécifie comment la légende doit être ancrée par rapport à cette zone.
plt.legend(loc='upper left') # Place la légende en haut à gauchePersonnalisation de l'Apparence
Matplotlib offre un contrôle granulaire sur l'apparence de la légende, y compris la taille de la police, la couleur du texte et l'ajout d'effets visuels.
Taille et Propriétés de la Police
Le paramètre fontsize permet de contrôler la taille du texte de la légende. Il peut accepter des valeurs entières (taille en points) ou des chaînes de caractères prédéfinies comme 'small', 'medium', 'large', etc. Le paramètre prop permet de spécifier des propriétés de police plus avancées via un objet FontProperties ou un dictionnaire.
plt.legend(fontsize='large') # Définit la taille de la police à "large"Couleur du Texte
La couleur du texte de la légende peut être définie à l'aide du paramètre labelcolor. Il peut s'agir d'une chaîne de caractères unique pour toutes les entrées, ou d'une liste de chaînes de caractères si chaque entrée doit avoir une couleur différente. Cette propriété peut également être configurée globalement via rcParams["legend.labelcolor"].
plt.legend(labelcolor='red') # Toutes les étiquettes seront rougesplt.legend(labelcolor=['blue', 'green', 'purple']) # Couleurs spécifiques pour chaque étiquetteTitre de la Légende
Il est possible d'ajouter un titre à la légende pour lui donner un contexte supplémentaire. Le paramètre title permet de définir le texte du titre. Des propriétés de police spécifiques au titre peuvent être définies avec title_fontproperties.
plt.legend(title="Mes Séries de Données")Effet d'Ombre
Pour améliorer l'esthétique, un effet d'ombre peut être ajouté à la boîte de la légende à l'aide du paramètre shadow.
plt.legend(shadow=True)Gestion des Artistes et des Handler
Dans certains cas, Matplotlib peut avoir besoin d'aide pour savoir comment représenter certains types d'artistes (objets graphiques) dans la légende. Le paramètre handler permet de spécifier des gestionnaires personnalisés pour ces artistes. Cependant, certains artistes ne sont pas encore pris en charge par cette fonctionnalité.
Utilisation de bbox_transform
Le paramètre bbox_transform permet de définir un système de coordonnées pour la boîte englobante de la légende (bbox_to_anchor). Cela offre un contrôle très fin sur le positionnement, bien que son utilisation soit généralement découragée au profit des options loc et bbox_to_anchor plus simples.
Méthodes Alternatives pour Ajouter des Légendes
Matplotlib propose plusieurs approches pour intégrer des légendes dans vos graphiques. Comprendre ces différentes méthodes permet de choisir la plus adaptée à chaque situation.
Méthode 1 : Utilisation des Étiquettes des Artistes
La méthode la plus courante, comme vu précédemment, consiste à définir des étiquettes lors de la création des artistes (par exemple, en utilisant plt.plot(..., label='...')). La fonction plt.legend() récupère alors ces étiquettes.
# Création d'une figure et d'un axefig, ax = plt.subplots()# Tracer des données avec des étiquettesax.plot(np.sin(np.linspace(0, 10, 100)), label='Sinus')ax.plot(np.cos(np.linspace(0, 10, 100)), label='Cosinus')# Ajouter la légende en utilisant les étiquettes des artistesax.legend()plt.show()Créer des graphiques pour une publication scientifique avec matplotlib | Python pour la Science #8
Méthode 2 : Fournir un Itérable de Chaînes de Caractères
Une autre approche consiste à fournir explicitement une liste de chaînes de caractères à la fonction plt.legend(). Cette liste correspondra, dans l'ordre, aux éléments graphiques tracés. Cette méthode est utile lorsque les artistes n'ont pas été créés avec des étiquettes, ou si vous souhaitez modifier les étiquettes pour la légende uniquement.
# Création d'une figure et d'un axefig, ax = plt.subplots()# Tracer des données sans étiquettes initialesline1, = ax.plot(np.random.rand(10), label='_nolegend_') # Utiliser '_nolegend_' pour exclure de la légende autoline2, = ax.plot(np.random.rand(10), label='_nolegend_')# Fournir manuellement les étiquettes pour la légendeax.legend([line1, line2], ['Série Aléatoire 1', 'Série Aléatoire 2'])plt.show()Dans cet exemple, les tracés sont créés avec label='_nolegend_' pour désactiver la génération automatique de légende pour ces lignes spécifiques. Ensuite, nous fournissons explicitement la liste des artistes ([line1, line2]) et la liste des étiquettes correspondantes à ax.legend().
La Propriété label des Artistes
Chaque objet tracé dans Matplotlib (un "artiste") possède une propriété label. C'est cette propriété qui est lue par défaut par plt.legend(). Si vous créez un artiste et que vous souhaitez qu'il apparaisse dans la légende, vous devez lui assigner une chaîne de caractères via son paramètre label.
# Création d'un graphiqueplt.figure()plt.plot([1, 2, 3], [4, 5, 6], label='Données Principales')plt.plot([1, 2, 3], [6, 5, 4], label='Données Secondaires')# La fonction legend() récupère automatiquement les labelsplt.legend()plt.show()Paramètres Avancés pour les Légendes
Matplotlib offre une flexibilité considérable pour ajuster chaque aspect de la légende, allant des propriétés de police à la manière dont la boîte de la légende est gérée.
prop et fontsize
Les paramètres prop et fontsize permettent de contrôler la typographie des étiquettes de la légende.
fontsize: Peut être un entier (points) ou une chaîne prédéfinie ('xx-small'à'xx-large').prop: Accepte un objetFontPropertiesou un dictionnaire pour définir des propriétés de police plus détaillées comme la famille, le style, le poids, etc.
labelcolor
La couleur du texte des étiquettes peut être spécifiée par labelcolor. Cela peut être une seule couleur pour toutes les entrées, ou une liste de couleurs pour personnaliser chaque étiquette individuellement.
# Exemple avec labelcolorplt.figure()plt.plot([1, 2, 3], [1, 4, 9], label='Carré', color='blue')plt.plot([1, 2, 3], [1, 8, 27], label='Cube', color='red')plt.legend(labelcolor=['blue', 'red'])plt.show()title et title_fontproperties
Pour ajouter un titre à la légende, utilisez le paramètre title. Les propriétés de police de ce titre peuvent être ajustées indépendamment avec title_fontproperties. Il est important de noter que title_fontproperties ne peut pas être utilisé en même temps que prop pour le titre.
alignment
Le paramètre alignment contrôle l'alignement du titre de la légende et de la boîte contenant les entrées. Les options sont 'center', 'left', et 'right'.
bbox_inches et pad_inches
Lors de la sauvegarde d'une figure, bbox_inches='tight' est souvent utilisé pour s'assurer que tous les éléments du graphique, y compris la légende, sont inclus dans l'image sauvegardée. pad_inches contrôle l'espace blanc autour du contenu de la figure.
figure.bbox et bbox_transform
Le paramètre figure.bbox (lorsque figure.legend est utilisé) et bbox_transform permettent de définir la boîte englobante et son système de coordonnées pour un positionnement très précis. bbox_to_anchor est souvent utilisé en conjonction avec ces paramètres.
Considérations sur les Différents Types de Graphiques
La manière dont une légende est générée peut varier légèrement en fonction du type de graphique.
Légendes pour les Graphiques Dispersés (Scatter Plots)
Pour les graphiques dispersés créés avec plt.scatter(), chaque point peut avoir une couleur ou une taille différente. Pour créer une légende significative, il est souvent nécessaire de tracer des points "fantômes" ou d'utiliser des techniques spécifiques pour associer des symboles et des couleurs aux catégories de données.
# Exemple pour un scatter plotx = np.random.rand(20)y = np.random.rand(20)colors = np.random.rand(20)sizes = 1000 * np.random.rand(20)# Pour une légende simple, on peut tracer des points séparés pour chaque catégorieplt.scatter(x, y, c=colors, s=sizes, alpha=0.5, cmap='viridis')# Créer une légende pour les couleurs (nécessite une approche plus avancée, souvent avec des boucles)# Pour cet exemple, nous allons montrer comment ajouter une légende généraleplt.colorbar(label='Intensité de la couleur') # Ajoute une barre de couleur pour le scatter plot# Pour une légende avec des catégories distinctes, une approche différente est nécessaire.# Une méthode courante consiste à tracer des points séparés pour chaque catégorie avec des labels.categories = ['A', 'B', 'C']for i, cat in enumerate(categories): subset = np.random.rand(5) # Données fictives pour chaque catégorie plt.scatter([], [], label=f'Catégorie {cat}', color=plt.cm.viridis(i/len(categories))) # Points fantômes pour la légendeplt.legend(scatterpoints=1) # scatterpoints=1 est utile pour les scatter plotsplt.show()La création d'une légende pour un graphique dispersé où chaque point représente une observation unique et où les couleurs ou tailles codent des variables peut être complexe. Souvent, on utilise des "points fantômes" (des points tracés mais non affichés sur le graphique principal) pour générer les entrées de légende.
Artistes Non Supportés
Il est important de noter que tous les artistes créés dans Matplotlib ne sont pas automatiquement pris en charge par le système de légende. Pour ces cas, des gestionnaires personnalisés (handler_map) peuvent être nécessaires.
Réglages Globaux avec rcParams
Matplotlib permet de définir des paramètres par défaut pour les légendes, qui seront appliqués à tous les graphiques créés par la suite dans la même session, sauf s'ils sont explicitement surchargés lors de l'appel à plt.legend().
# Définir des paramètres par défaut pour la légendeplt.rcParams['legend.fontsize'] = 'medium'plt.rcParams['legend.labelcolor'] = 'gray'plt.rcParams['legend.title_fontsize'] = 'large'# Création d'un graphiqueplt.figure()plt.plot([1, 2, 3], [2, 4, 1], label='Données A')plt.plot([1, 2, 3], [3, 1, 4], label='Données B')plt.legend() # Utilise les paramètres par défaut définis ci-dessusplt.show()# Réinitialiser les paramètres par défaut si nécessaireplt.rcdefaults()Ces réglages globaux sont particulièrement utiles pour maintenir une cohérence visuelle sur un ensemble de graphiques.
Conclusion Préliminaire
La maîtrise des légendes dans Matplotlib est essentielle pour créer des visualisations de données claires et informatives. En comprenant les différentes méthodes d'ajout, les options de personnalisation et les paramètres avancés, les utilisateurs peuvent concevoir des légendes qui améliorent significativement la compréhension de leurs graphiques. Que ce soit par l'utilisation d'étiquettes d'artistes, la fourniture d'itérables de chaînes, ou la configuration globale via rcParams, Matplotlib offre la flexibilité nécessaire pour répondre à une large gamme de besoins de visualisation.
tags: #legende #graphique #python #mathplotlib #plot
