Rimuovi la legenda su una figura a tappetino


169

Per aggiungere una legenda a un grafico matplotlib, si esegue semplicemente legend().

Come rimuovere una legenda da una trama?

(Il più vicino a cui sono arrivato è correre legend([])per svuotare la legenda dai dati. Ma questo lascia un brutto rettangolo bianco nell'angolo in alto a destra.)

Risposte:


229

A partire da matplotlibv1.4.0rc4 , removeè stato aggiunto un metodo all'oggetto legenda.

Uso:

ax.get_legend().remove()

o

legend = ax.legend(...)
...
legend.remove()

Vedi qui per il commit in cui è stato introdotto.


2
Per qualche ragione, la ax.get_legend().remove()soluzione non ha funzionato nel mio caso, mentre la seconda soluzione ( legend = ax.legend() ... legend.remove()) ha funzionato. forse perché axera un AxesSubplotcaso mio?
jhin

@naitsirhc, grazie per aver condiviso.
Andrew Li,

91

Se si desidera tracciare un frame di dati Pandas e si desidera rimuovere la legenda, aggiungere legenda = Nessuno come parametro al comando di stampa.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df2 = pd.DataFrame(np.random.randn(10, 5))
df2.plot(legend=None)
plt.show()

86

È possibile utilizzare il set_visiblemetodo della legenda :

ax.legend().set_visible(False)
draw()

Questo si basa su una risposta che mi è stata fornita in risposta a una domanda simile che ho avuto qualche tempo fa qui

(Grazie per la risposta Jouni - Mi dispiace non essere stato in grado di contrassegnare la domanda come risposta ... forse qualcuno che ha l'autorità può farlo per me?)


4
questo nasconde solo la legenda e in realtà non rimuove l'oggetto, giusto?
vlsd,

16

devi aggiungere le seguenti righe di codice:

ax = gca()
ax.legend_ = None
draw()

gca () restituisce l'handle degli assi corrente e ha quella proprietà legenda_


Grazie, sembra funzionare. (Ma che cosa un orribile un'interfaccia ...) Vi suggerisco di sostituire draw()da show(). O c'è un vantaggio particolare nell'uso draw?
Olivier Verdier,

show()sarebbe OK se l'aggiornamento del grafico fosse l'ultimo comando di un programma. draw()va bene, in quanto è il comando generale di aggiornamento del grafico. Ad esempio, potresti voler richiedere all'utente qualche input in un terminale dopo aver aggiornato il grafico, cosa che non può essere fatta con il blocco show().
Eric O Lebigot,

Destra. Grazie per la risposta. Ora sono d'accordo che drawsia più appropriato (ma ho sempre usato showper aggiornare i miei grafici ...).
Olivier Verdier,

6

Se non stai usando oggetti trama di fichi e asce puoi farlo in questo modo:

import matplotlib.pyplot as plt

# do plot specifics
plt.legend('')
plt.show()

3

se chiami pyplotcomeplt

frameon=False è rimuovere il bordo attorno alla legenda

e '' sta trasmettendo le informazioni secondo cui nessuna variabile dovrebbe essere nella legenda

import matplotlib.pyplot as plt
plt.legend('',frameon=False)

1

Ho creato una legenda aggiungendola alla figura, non a un asse (matplotlib 2.2.2). Per rimuoverlo, ho impostato l' legendsattributo della figura su un elenco vuoto:

import matplotlib.pyplot as plt

fig = plt.figure()
ax1 = fig.add_subplot(111)
ax2 = ax1.twinx()

ax1.plot(range(10), range(10, 20), label='line 1')
ax2.plot(range(10), range(30, 20, -1), label='line 2')

fig.legend()

fig.legends = []

plt.show()

0

Secondo le informazioni di @naitsirhc, volevo trovare la documentazione ufficiale dell'API. Ecco i miei risultati e alcuni esempi di codice.

  1. Ho creato un matplotlib.Axesoggetto di seaborn.scatterplot().
  2. Il ax.get_legend()restituirà un matplotlib.legned.Legendesempio.
  3. Infine, si chiama la .remove()funzione per rimuovere la legenda dalla trama.
ax = sns.scatterplot(......)
_lg = ax.get_legend()
_lg.remove()

Se controlli il matplotlib.legned.Legenddocumento API, non vedrai la .remove()funzione.

Il motivo è che l' matplotlib.legned.Legendereditato il matplotlib.artist.Artist. Pertanto, quando lo chiami, in ax.get_legend().remove()pratica chiama matplotlib.artist.Artist.remove().

Alla fine, potresti persino semplificare il codice in due righe.

ax = sns.scatterplot(......)
ax.get_legend().remove()
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.