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).
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).
Odpowiedzi:
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.
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ć?)
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_
draw()przez show(). Czy jest jakaś szczególna zaleta w używaniu draw?
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().
drawjest to bardziej odpowiednie (ale zawsze showaktualizowałem swoje wykresy ...).
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()
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()
Zgodnie z informacją z @naitsirhc chciałem znaleźć oficjalną dokumentację API. Oto moje odkrycie i przykładowy kod.
matplotlib.Axesobiekt wg seaborn.scatterplot().ax.get_legend()Zwróci matplotlib.legned.Legendprzypadku..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()
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, żeaxbyłAxesSubplotw moim przypadku?