Comment créer une légende unique pour toutes les sous-parcelles dans Matplotlib

Jinku Hu 30 janvier 2023
  1. Créer une seule légende pour toutes les sous-parcelles avec la méthode figure.legend dans Matplotlib
  2. 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
Comment créer une légende unique pour toutes les sous-parcelles 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()

La légende des figures de Matplotlib obtient des étiquettes de poignées de légende

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()

Matplotlib Figure Legend_all labels from get_legend_handles_labels

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.

Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Article connexe - Matplotlib Legend