Ajout de Légende
Lorsque plusieurs éléments sont présents dans un graphique, il est souvent utile de les identifier pour plus de clarté. La légende remplit cette fonction en fournissant une zone compacte qui explique les différents composants du graphique.
Voici trois méthodes courantes pour créer une légende dans matplotlib
.
Première option
Considérez l'exemple suivant pour clarifier le concept :
import matplotlib.pyplot as plt import numpy as np # Define categories and data questions = ['question_1', 'question_2', 'question_3'] yes_answers = np.array([500, 240, 726]) no_answers = np.array([432, 618, 101]) answers = np.array([yes_answers, no_answers]) # Set positions and bar width positions = np.arange(len(questions)) width = 0.3 # Create the grouped bar chart for i in range(len(answers)): plt.bar(positions + width * i, answers[i], width) # Adjust x-axis ticks to the center of groups plt.xticks(positions + width * (len(answers) - 1) / 2, questions) # Setting the labels for the legend explicitly plt.legend(['positive answers', 'negative answers']) plt.show()
Dans le coin supérieur gauche, une légende explique les différentes barres du graphique. Cette légende est créée à l'aide de la fonction plt.legend()
, avec une liste d'étiquettes passée en premier argument—généralement appelée labels
.
Deuxième option
Une autre possibilité consiste à spécifier le paramètre label
dans chaque appel de la fonction de tracé, comme bar dans notre exemple :
import matplotlib.pyplot as plt import numpy as np # Define x-axis categories and their positions questions = ['question_1', 'question_2', 'question_3'] positions = np.arange(len(questions)) # Define answers for each category yes_answers = np.array([500, 240, 726]) no_answers = np.array([432, 618, 101]) answers = np.array([yes_answers, no_answers]) labels = ['positive answers', 'negative answers'] # Set the width for each bar width = 0.3 # Plot each category with a label for i in range(len(answers)): plt.bar(positions + width * i, answers[i], width, label=labels[i]) # Set x-axis ticks and labels at the center of each group plt.xticks(positions + width * (len(answers) - 1) / 2, questions) # Automatically create legend from label parameters plt.legend() plt.show()
Ici, plt.legend()
détermine automatiquement les éléments à ajouter à la légende ainsi que leurs étiquettes ; tous les éléments pour lesquels le paramètre label est spécifié sont inclus.
Troisième option
En réalité, il existe même une option supplémentaire utilisant la méthode set_label()
sur l'artiste (bar
dans notre exemple) :
import matplotlib.pyplot as plt import numpy as np questions = ['question_1', 'question_2', 'question_3'] positions = np.arange(len(questions)) yes_answers = np.array([500, 240, 726]) no_answers = np.array([432, 618, 101]) answers = np.array([yes_answers, no_answers]) width = 0.3 labels = ['positive answers', 'negative answers'] # Plot bars for each category with labels for i in range(len(answers)): bar = plt.bar(positions + width * i, answers[i], width) bar.set_label(labels[i]) # Set x-axis ticks and labels at the center of the grouped bars center_positions = positions + width * (len(answers) - 1) / 2 plt.xticks(center_positions, questions) # Display legend above the plot, centered horizontally plt.legend(loc='upper center') plt.show()
Emplacement de la légende
Il existe un autre argument clé important de la fonction legend()
, loc
, qui spécifie l'emplacement de la légende. Sa valeur par défaut est best
, ce qui "indique" à matplotlib
de choisir automatiquement la meilleure position pour la légende afin d'éviter le chevauchement avec les données.
import matplotlib.pyplot as plt import numpy as np questions = ['question_1', 'question_2', 'question_3'] positions = np.arange(len(questions)) yes_answers = np.array([500, 240, 726]) no_answers = np.array([432, 618, 101]) answers = np.array([yes_answers, no_answers]) width = 0.3 labels = ['positive answers', 'negative answers'] # Plot bars for each category with labels for i, label in enumerate(labels): bars = plt.bar(positions + width * i, answers[i], width) bars.set_label(label) # Set x-axis ticks and labels at the center of the grouped bars center_positions = positions + width * (len(answers) - 1) / 2 plt.xticks(center_positions, questions) # Display legend above the plot, centered horizontally plt.legend(loc='upper center') plt.show()
Dans cet exemple, la légende est positionnée au centre supérieur du graphique. D'autres valeurs valides pour le paramètre loc
incluent :
'upper right'
,'upper left'
,'lower left'
;'lower right'
,'right'
;'center left'
,'center right'
,'lower center'
,'center'
.
Vous pouvez approfondir le sujet dans la documentation de legend()
Swipe to start coding
- Étiqueter les barres les plus basses comme
'primary sector'
en spécifiant l'argument de mot-clé approprié. - Étiqueter les barres du milieu comme
'secondary sector'
en spécifiant l'argument de mot-clé approprié. - Étiqueter les barres du haut comme
'tertiary sector'
en spécifiant l'argument de mot-clé approprié. - Placer la légende sur le côté droit, centrée verticalement.
Solution
Merci pour vos commentaires !