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 remove
metoda 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()
.
draw
jest to bardziej odpowiednie (ale zawsze show
aktualizował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 legends
atrybut 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.Axes
obiekt wg seaborn.scatterplot()
.ax.get_legend()
Zwróci matplotlib.legned.Legend
przypadku..remove()
funkcję, aby usunąć legendę ze swojej fabuły.ax = sns.scatterplot(......)
_lg = ax.get_legend()
_lg.remove()
Jeśli sprawdzisz matplotlib.legned.Legend
dokument API, nie zobaczysz .remove()
funkcji.
Powodem jest to, że matplotlib.legned.Legend
odziedziczył 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, żeax
byłAxesSubplot
w moim przypadku?