Bir matplotlib figüründeki efsaneyi kaldırın


169

Bir matplotlib grafiğine bir açıklama eklemek için, biri basitçe çalışır legend().

Bir efsane bir arsadan nasıl kaldırılır ?

(Buraya en yakın geldiğimde legend([]), efsaneyi verilerden boşaltmak için koşmaktır. Ama bu sağ üst köşede çirkin beyaz bir dikdörtgen bırakır.)

Yanıtlar:


229

İtibariyle matplotlibv1.4.0rc4 bir removeyöntem gösterge nesnesine eklendi.

Kullanımı:

ax.get_legend().remove()

veya

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

Bunun tanıtıldığı taahhüt için buraya bakın .


2
Nedense, ax.get_legend().remove()çözüm benim durumumda işe yaramazken, ikinci çözüm ( legend = ax.legend() ... legend.remove()) çalıştı. belki axbir oldu AxesSubplotbenim durumumda?
jhin

@naitsirhc, Paylaşımın için teşekkürler.
Andrew Li

91

Bir Pandas veri çerçevesi çizmek ve göstergeyi kaldırmak istiyorsanız, plot komutuna legend = None parametresini ekleyin.

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

Efsanenin set_visibleyöntemini kullanabilirsiniz :

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

Bu, bir süre önce burada yaşadığım benzer bir soruya yanıt olarak bana verilen bir cevaba dayanıyor

(Bu cevap için teşekkürler Jouni - Soruyu cevaplandı olarak işaretleyemediğim için üzgünüm ... belki de yetkisi olan biri bunu benim için yapabilir?)


4
bu sadece efsaneyi gizler ve aslında nesneyi kaldırmaz, değil mi?
vlsd

16

aşağıdaki kod satırlarını eklemeniz gerekir:

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

gca () geçerli eksen tutamacını döndürür ve bu legend_ özelliğine sahiptir


Teşekkür ederim, işe yarıyor gibi görünüyor. (Ama ne korkunç bir arayüz ...) Ben yerine önermek draw()tarafından show(). Yoksa kullanımda özel bir avantaj var drawmı?
Olivier Verdier

show()grafik güncellemesi bir programın son komutu olsaydı Tamam olurdu. draw()genel grafik güncelleme komutu olduğu için iyidir. Örneğin, grafiği güncelledikten sonra kullanıcıdan engelleme ile yapılamayan bir terminalde bazı girişler istemek isteyebilirsiniz show().
Eric O Lebigot

Sağ. Cevap için teşekkürler. Şimdi drawbunun daha uygun olduğuna katılıyorum (ama her zaman showgrafiklerimi güncellemeye alışkım ...).
Olivier Verdier

6

İncir ve balta çizim nesnelerini kullanmıyorsanız bunu şöyle yapabilirsiniz:

import matplotlib.pyplot as plt

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

3

Eğer ararsanız pyplotolarakplt

frameon=False efsanenin etrafındaki sınırı kaldırmak

ve '' efsanede hiçbir değişkenin olmaması gerektiği bilgisini aktarıyor

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

1

Bir eksene değil, şekle ekleyerek bir efsane yaptım (matplotlib 2.2.2). Kaldırmak için, legendsşeklin niteliğini boş bir listeye ayarladım :

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

@Naitsirhc adresindeki bilgilere göre, resmi API belgelerini bulmak istedim. İşte benim bulgu ve bazı örnek kod.

  1. matplotlib.AxesTarafından bir nesne oluşturdum seaborn.scatterplot().
  2. ax.get_legend()Bir dönecektir matplotlib.legned.Legendörneği.
  3. Son olarak, göstergeyi .remove()çiziminizden kaldırmak için işlevi çağırırsınız .
ax = sns.scatterplot(......)
_lg = ax.get_legend()
_lg.remove()

matplotlib.legned.LegendAPI belgesini kontrol ederseniz .remove()işlevi görmezsiniz .

Nedeni matplotlib.legned.Legendmiras matplotlib.artist.Artist. Bu nedenle, bunu aradığınızda ax.get_legend().remove()temel olarak arayın matplotlib.artist.Artist.remove().

Sonunda, kodu iki satıra bile basitleştirebilirsiniz.

ax = sns.scatterplot(......)
ax.get_legend().remove()
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.