Crea una singola legenda per tutte le sottotrame in Matplotlib

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

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.

Articolo correlato - Matplotlib Legend

  • Modificare lo spessore della linea delle linee in Matplotlib Legend
  • Specificare la posizione della legenda nelle coordinate del grafico in Matplotlib