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.)

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.


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()

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?)


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_


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()

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)

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()

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()
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.