Hapus legenda pada gambar matplotlib

169

Untuk menambahkan legenda ke plot matplotlib, cukup jalankan legend().

Bagaimana cara menghapus legenda dari plot?

(Yang paling dekat dengan saya adalah menjalankan legend([])untuk mengosongkan legenda dari data. Tapi itu meninggalkan persegi panjang putih jelek di sudut kanan atas.)

Olivier Verdier
sumber

Jawaban:

229

Pada matplotlibv1.4.0rc4 , sebuah removemetode telah ditambahkan ke objek legenda.

Pemakaian:

ax.get_legend().remove()

atau

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

Lihat di sini untuk komit tempat ini diperkenalkan.

naitsirhc
sumber
2
Untuk beberapa alasan, ax.get_legend().remove()solusi tidak berfungsi dalam kasus saya, sedangkan solusi kedua ( legend = ax.legend() ... legend.remove()) berfungsi. mungkin karena axada AxesSubplotdalam kasus saya?
jhin
@naitsirhc, Terima kasih atas berbagi Anda.
Andrew Li
91

Jika Anda ingin memplot dataframe Pandas dan ingin menghapus legenda, tambahkan legend = Tidak ada sebagai parameter pada perintah plot.

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()
pemain42
sumber
86

Anda bisa menggunakan metode legenda set_visible:

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

Ini didasarkan pada jawaban yang diberikan kepada saya sebagai jawaban atas pertanyaan serupa yang saya miliki beberapa waktu lalu di sini

(Terima kasih atas jawaban itu, Jouni - maaf saya tidak dapat menandai pertanyaan yang dijawab ... mungkin seseorang yang memiliki wewenang dapat melakukannya untuk saya?)

ERN
sumber
4
ini hanya menyembunyikan legenda dan itu sebenarnya tidak menghilangkan objek, kan?
vlsd
16

Anda harus menambahkan baris kode berikut:

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

gca () mengembalikan pegangan sumbu saat ini, dan memiliki properti legend_

fceruti
sumber
Terima kasih, itu sepertinya berhasil. (Tapi antarmuka yang mengerikan ...) Saya sarankan untuk mengganti draw()dengan show(). Atau apakah ada keuntungan khusus dalam menggunakan draw?
Olivier Verdier
show()akan baik-baik saja jika pembaruan grafik adalah perintah terakhir dari suatu program. draw()baik-baik saja, karena itu adalah perintah pembaruan grafik umum. Misalnya, Anda mungkin ingin meminta pengguna untuk input di terminal setelah memperbarui grafik, yang tidak dapat dilakukan dengan pemblokiran show().
Eric O Lebigot
Baik. Terima kasih atas jawabannya. Sekarang saya setuju itu drawlebih tepat (tapi saya selalu terbiasa showmemperbarui grafik saya ...).
Olivier Verdier
6

Jika Anda tidak menggunakan objek plot gambar dan kapak, Anda dapat melakukannya seperti:

import matplotlib.pyplot as plt

# do plot specifics
plt.legend('')
plt.show()
Pelonomi Moiloa
sumber
3

jika Anda memanggil pyplotsebagaiplt

frameon=False adalah untuk menghapus perbatasan di sekitar legenda

dan '' meneruskan informasi yang tidak boleh ada variabel dalam legenda

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

Saya membuat legenda dengan menambahkannya ke gambar, bukan ke sumbu (matplotlib 2.2.2). Untuk menghapusnya, saya mengatur legendsatribut gambar ke daftar kosong:

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
sumber
0

Menurut informasi dari @naitsirhc, saya ingin mencari dokumentasi API resmi. Berikut ini adalah temuan saya dan beberapa kode sampel.

  1. Saya membuat matplotlib.Axesobjek oleh seaborn.scatterplot().
  2. The ax.get_legend()akan kembalimatplotlib.legned.Legend instance.
  3. Akhirnya, Anda memanggil .remove()fungsi untuk menghapus legenda dari plot Anda.
ax = sns.scatterplot(......)
_lg = ax.get_legend()
_lg.remove()

Jika Anda memeriksa matplotlib.legned.Legenddokumen API, Anda tidak akan melihat .remove()fungsinya.

Alasannya adalah bahwa matplotlib.legned.Legendwarisan matplotlib.artist.Artist. Karena itu, ketika Anda memanggil ax.get_legend().remove()itu pada dasarnya panggilan matplotlib.artist.Artist.remove().

Pada akhirnya, Anda bahkan bisa menyederhanakan kode menjadi dua baris.

ax = sns.scatterplot(......)
ax.get_legend().remove()
Andrew Li
sumber