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

  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

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.

Article connexe - Matplotlib Legend

  • Comment définir la largeur de ligne des lignes dans la légende Matplotlib
  • Comment placer la légende en dehors du terrain dans Matplotlib