HOWTO · Matplotlib

Crea una singola legenda per tutte le sottotrame in Matplotlib

La classe di figure Matplotlib ha un metodo di legenda per posizionare la legenda a livello di figura ma non a livello di sottotrama. È particolarmente conveniente se il motivo e le etichette delle linee sono gli stessi per tutte le sottotrame.

In questa pagina

La classe Matplotlib figure ha un metodo legend per posizionare la legend a livello di figura ma non a livello di subplot. È particolarmente conveniente se il motivo e le etichette delle linee sono gli stessi per tutte le sottotrame.

Crea una singola legenda per tutte le sottotrame con il metodo figure.legend in 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()

Matplotlib Figure Legend ottiene le etichette delle maniglie della legenda

lines, labels = fig.axes[-1].get_legend_handles_labels()

Perché abbiamo la presunzione che tutte le sottotrame abbiano le stesse linee ed etichette, quindi, le maniglie e le etichette degli ultimi Assi potrebbero essere utilizzate per l’intera figura.

Crea una singola legenda per tutte le sottotrame con il metodo figure.legend quando le maniglie e le linee sono diverse in Matplotlib

Se il modello di linea e le etichette sono diversi tra le sottotrame ma è necessaria un’unica legenda per tutte le sottotrame, è necessario ottenere tutte le maniglie e le etichette di linea da tutte le sottotrame.

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 Figura Legend_all labels da get_legend_handles_labels

for ax in fig.axes:
    axLine, axLabel = ax.get_legend_handles_labels()
    lines.extend(axLine)
    labels.extend(axLabel)

Tutte le maniglie e le etichette delle linee vengono aggiunte alla lista lines e labels con il metodo lista extend nel caso in cui esistano più linee ed etichette in una singola sottotrama.