Usuń legendę z figury matplotlib

169

Aby dodać legendę do wykresu matplotlib, wystarczy uruchomić legend().

Jak usunąć legendę z fabuły?

(Najbliżej do tego doszedłem legend([]), aby usunąć legendę z danych. Pozostaje brzydki biały prostokąt w prawym górnym rogu).

Olivier Verdier
źródło

Odpowiedzi:

229

Począwszy od matplotlibv1.4.0rc4 , A removemetoda została dodana do obiektu legenda.

Stosowanie:

ax.get_legend().remove()

lub

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

Zobacz tutaj zmiany, w których zostało to wprowadzone.

naitsirhc
źródło
2
Z jakiegoś powodu ax.get_legend().remove()rozwiązanie nie działało w moim przypadku, podczas gdy drugie rozwiązanie ( legend = ax.legend() ... legend.remove()) działało. może dlatego, że axbył AxesSubplotw moim przypadku?
jhin
@naitsirhc, dziękuję za udostępnienie.
Andrew Li
91

Jeśli chcesz wykreślić ramkę danych Pandas i chcesz usunąć legendę, dodaj legendę = Brak jako parametr do polecenia kreślenia.

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()
cast42
źródło
86

Możesz użyć metody legendy set_visible:

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

Opiera się to na odpowiedzi udzielonej mi w odpowiedzi na podobne pytanie, które miałem tutaj jakiś czas temu

(Dziękuję za odpowiedź Jouni - przepraszam, że nie udało mi się oznaczyć pytania jako udzielonego ... może ktoś mający uprawnienia może to dla mnie zrobić?)

ERN
źródło
4
to tylko ukrywa legendę i tak naprawdę nie usuwa obiektu, prawda?
vlsd
16

musisz dodać następujące linie kodu:

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

gca () zwraca uchwyt bieżącej osi i ma tę właściwość legend_

fceruti
źródło
Dziękuję, wydaje się, że działa. (Ale co straszne interfejs ...) Proponuję zastąpić draw()przez show(). Czy jest jakaś szczególna zaleta w używaniu draw?
Olivier Verdier
show()byłoby OK, gdyby aktualizacja wykresu była ostatnią komendą programu. draw()jest w porządku, ponieważ jest to ogólne polecenie aktualizacji wykresu. Możesz na przykład chcieć poprosić użytkownika o wprowadzenie pewnych danych w terminalu po zaktualizowaniu wykresu, czego nie można zrobić z blokowaniem show().
Eric O Lebigot
Dobrze. Dziękuję za odpowiedź. Teraz zgadzam się, że drawjest to bardziej odpowiednie (ale zawsze showaktualizowałem swoje wykresy ...).
Olivier Verdier
6

Jeśli nie używasz obiektów wykresu fig i topór, możesz to zrobić w następujący sposób:

import matplotlib.pyplot as plt

# do plot specifics
plt.legend('')
plt.show()
Pelonomi Moiloa
źródło
3

jeśli zadzwonisz pyplotjakoplt

frameon=False jest usunięcie granicy wokół legendy

a „” przekazuje informację, że żadna zmienna nie powinna znajdować się w legendzie

import matplotlib.pyplot as plt
plt.legend('',frameon=False)
Bruno
źródło
1

Stworzyłem legendę, dodając ją do rysunku, a nie do osi (matplotlib 2.2.2). Aby ją usunąć, ustawiłem legendsatrybut figury na pustą listę:

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()
boudewijn21
źródło
0

Zgodnie z informacją z @naitsirhc chciałem znaleźć oficjalną dokumentację API. Oto moje odkrycie i przykładowy kod.

  1. Stworzyłem matplotlib.Axesobiekt wg seaborn.scatterplot().
  2. ax.get_legend()Zwróci matplotlib.legned.Legendprzypadku.
  3. Na koniec wywołujesz .remove()funkcję, aby usunąć legendę ze swojej fabuły.
ax = sns.scatterplot(......)
_lg = ax.get_legend()
_lg.remove()

Jeśli sprawdzisz matplotlib.legned.Legenddokument API, nie zobaczysz .remove()funkcji.

Powodem jest to, że matplotlib.legned.Legendodziedziczył matplotlib.artist.Artist. Dlatego, kiedy to nazywasz ax.get_legend().remove(), po prostu zadzwoń matplotlib.artist.Artist.remove().

W końcu możesz nawet uprościć kod do dwóch wierszy.

ax = sns.scatterplot(......)
ax.get_legend().remove()
Andrew Li
źródło