Comment créer une légende unique pour toutes les sous-parcelles dans Matplotlib
-
Créer une seule légende pour toutes les sous-parcelles avec la méthode
figure.legend
dans Matplotlib -
Créer une seule légende pour tous les sous-tracés avec la méthode
figure.legend
lorsque les poignées et les lignes sont différentes dans Matplotlib
La classe de figures de Matplotlib a une méthode de légende pour placer la légende au niveau de la figure mais pas au niveau de la sous-placette. C’est particulièrement pratique si le motif des lignes et les étiquettes sont les mêmes dans tous les sous-images.
Créer une seule légende pour toutes les sous-parcelles avec la méthode figure.legend
dans Matplotlib
import matplotlib.pyplot as plt
fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)
for ax in fig.axes:
ax.plot([0, 10], [0, 10], label="linear")
lines, labels = fig.axes[-1].get_legend_handles_labels()
fig.legend(lines, labels, loc="upper center")
plt.show()
lines, labels = fig.axes[-1].get_legend_handles_labels()
Parce que nous avons la présomption que toutes les sous-parcelles ont les mêmes lignes et étiquettes, donc que les poignées et étiquettes des dernières Axes
pourraient être utilisées pour l’ensemble de la figure.
Créer une seule légende pour tous les sous-tracés avec la méthode figure.legend
lorsque les poignées et les lignes sont différentes dans Matplotlib
Si le schéma de lignes et les étiquettes sont différents d’une sous-parcelle à l’autre mais qu’une seule légende est nécessaire pour toutes les sous-parcelles, nous devons obtenir toutes les poignées de lignes et les étiquettes de toutes les sous-parcelles.
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 501)
fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)
axes[0, 0].plot(x, np.sin(x), color="k", label="sin(x)")
axes[0, 1].plot(x, np.cos(x), color="b", label="cos(x)")
axes[1, 0].plot(x, np.sin(x) + np.cos(x), color="r", label="sin(x)+cos(x)")
axes[1, 1].plot(x, np.sin(x) - np.cos(x), color="m", label="sin(x)-cos(x)")
lines = []
labels = []
for ax in fig.axes:
axLine, axLabel = ax.get_legend_handles_labels()
lines.extend(axLine)
labels.extend(axLabel)
fig.legend(lines, labels, loc="upper right")
plt.show()
for ax in fig.axes:
axLine, axLabel = ax.get_legend_handles_labels()
lines.extend(axLine)
labels.extend(axLabel)
Toutes les poignées de lignes et les étiquettes sont ajoutées à la liste des lines
et des labels
avec la méthode extend
au cas où il y aurait plus de lignes et d’étiquettes dans une seule sous-parcelle.
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook