HOWTO · Matplotlib
Specificare la posizione della legenda nelle coordinate del grafico in Matplotlib
Questo articolo mostra come specificare la posizione della legenda in un grafico in Matplotlib.
In questa pagina
Per posizionare una legenda Matplotlib, imposta il parametro loc su una posizione standard, ad esempio "upper left" o "lower right". Per collocarla a una coordinata specifica, combina loc con bbox_to_anchor: bbox_to_anchor fornisce la coordinata di ancoraggio e loc seleziona il punto della legenda da allineare a essa. Il valore predefinito di borderaxespad aggiunge un piccolo spazio, quindi il punto visibile della legenda può trovarsi leggermente distante dalla coordinata; imposta borderaxespad=0 quando serve un allineamento esatto.
Esempi: posizionare una legenda Matplotlib con loc e bbox_to_anchor
L’esempio seguente crea due assi e assegna una legenda a ciascuno. Usa best sul primo asse e lower left sul secondo. Puoi modificare questi valori per confrontare le posizioni standard con i tuoi dati tracciati. Le figure mostrano i grafici risultanti; il codice indica quali impostazioni adattare.
import matplotlib.pyplot as plt
x = [1, 2, 3]
y1 = [0.5 * i + 1 for i in x]
y2 = [2 * i + 1 for i in x]
fig, ax = plt.subplots(2, 1)
ax[0].plot(x, y1, "b-", label="0.5x+1")
ax[0].plot(x, y2, "g-", label="2x+1")
ax[0].legend(loc="best")
ax[1].plot(x, y1, "b-", label="0.5x+1")
ax[1].plot(x, y2, "g-", label="2x+1")
ax[1].legend(loc="lower left")
plt.tight_layout()
plt.show()
Il parametro loc accetta valori come best, upper right, upper left, lower left, lower right, right, center left, center right, lower center, upper center e center:
best |
upper right |
upper left |
lower left |
lower right |
right |
center left |
center right |
lower center |
upper center |
center |
Per una posizione standard, loc colloca la legenda all’interno dei relativi assi. Con il valore best, Matplotlib sceglie la posizione in base agli elementi tracciati; valori con nome come lower left consentono invece di scegliere direttamente la posizione. Se la legenda copre una linea o un indicatore importante, prova un altro valore dell’elenco. Queste opzioni definiscono la posizione della legenda rispetto ai suoi assi, non rispetto all’intera figura.
Per posizionare la legenda in base a una coordinata, bbox_to_anchor specifica la coordinata di ancoraggio e loc seleziona il punto della legenda da allineare a essa. Nell’esempio seguente, ogni ancoraggio è espresso rispetto al proprio asse. L’indicatore rosso viene disegnato sulla stessa coordinata usando ax.transAxes, così l’ancoraggio è facile da individuare. I due assi usano valori diversi di loc per mostrare come cambia il punto selezionato della legenda. Con il valore predefinito di borderaxespad, la legenda rimane leggermente distanziata da ciascun indicatore, che continua comunque a segnare la coordinata di ancoraggio.
import matplotlib.pyplot as plt
x = [1, 2, 3]
y1 = [0.5 * i + 1 for i in x]
y2 = [2 * i + 1 for i in x]
fig, ax = plt.subplots(2, 1)
ax[0].plot(x, y1, "b-", label="Plot-1")
ax[0].plot(x, y2, "g-", label="Plot-2")
ax[0].legend(loc="upper left", bbox_to_anchor=(0.9, 0.75))
ax[0].scatter((0.9), (0.75), s=70, c="red", transform=ax[0].transAxes)
ax[1].plot(x, y1, "b-", label="Plot-1")
ax[1].plot(x, y2, "g-", label="Plot-2")
ax[1].legend(loc="center right", bbox_to_anchor=(0.6, 0.4))
ax[1].scatter((0.6), (0.4), s=70, c="red", transform=ax[1].transAxes)
plt.tight_layout()
plt.show()
Nell’asse superiore, bbox_to_anchor=(0.9, 0.75) colloca l’ancoraggio in corrispondenza dell’indicatore rosso. Poiché loc="upper left", il punto superiore sinistro della legenda si allinea a quell’ancoraggio, con un piccolo spazio visibile dovuto al valore predefinito di borderaxespad. Nell’asse inferiore, l’ancoraggio è (0.6, 0.4) e loc="center right", quindi il punto centrale destro della legenda si allinea all’indicatore rosso inferiore, con lo stesso effetto di spaziatura. Per far coincidere esattamente il punto selezionato con il relativo indicatore, aggiungi borderaxespad=0 alla chiamata legend di quell’asse.
Per adattare una delle due disposizioni, scegli prima una coordinata x e una y rispetto all’asse interessato, quindi imposta la tupla corrispondente in bbox_to_anchor e segna quel punto mentre regoli il grafico. Seleziona un valore di loc per il punto della legenda che vuoi allineare. Le due impostazioni agiscono insieme: cambiando solo l’ancoraggio sposti il punto selezionato, mentre cambiando loc modifichi quale punto della legenda viene allineato all’ancoraggio. Associa la trasformazione di ogni indicatore allo stesso asse della relativa legenda, così il riferimento visivo usa lo stesso spazio di coordinate. Mantieni il valore predefinito di borderaxespad per lasciare un piccolo spazio oppure imposta borderaxespad=0 nella chiamata legend per allineare esattamente la legenda all’indicatore. Non viene mostrato alcun output nella console; le figure qui sopra mostrano i grafici risultanti.