Matplotlib Legends tidak berfungsi


96

Sejak memutakhirkan matplotlib saya mendapatkan kesalahan berikut setiap kali mencoba membuat legenda:

/usr/lib/pymodules/python2.7/matplotlib/legend.py:610: UserWarning: Legend does not support [<matplotlib.lines.Line2D object at 0x3a30810>]
Use proxy artist instead.

http://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist

  warnings.warn("Legend does not support %s\nUse proxy artist instead.\n\nhttp://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist\n" % (str(orig_handle),))
/usr/lib/pymodules/python2.7/matplotlib/legend.py:610: UserWarning: Legend does not support [<matplotlib.lines.Line2D object at 0x3a30990>]
Use proxy artist instead.

http://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist

  warnings.warn("Legend does not support %s\nUse proxy artist instead.\n\nhttp://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist\n" % (str(orig_handle),))

Ini bahkan terjadi dengan skrip sepele seperti ini:

import matplotlib.pyplot as plt

a = [1,2,3]
b = [4,5,6]
c = [7,8,9]

plot1 = plt.plot(a,b)
plot2 = plt.plot(a,c)

plt.legend([plot1,plot2],["plot 1", "plot 2"])
plt.show()

Saya telah menemukan tautan yang ditunjukkan oleh kesalahan kepada saya sangat tidak berguna dalam mendiagnosis sumber kesalahan.

Jawaban:


164

Anda harus menambahkan koma:

plot1, = plt.plot(a,b)
plot2, = plt.plot(a,c)

Alasan Anda memerlukan koma adalah karena plt.plot () mengembalikan tupel objek baris, tidak peduli berapa banyak yang sebenarnya dibuat dari perintah. Tanpa koma, "plot1" dan "plot2" adalah tupel, bukan objek garis, membuat panggilan selanjutnya ke plt.legend () gagal.

Koma secara implisit membongkar hasil sehingga alih-alih tupel, "plot1" dan "plot2" secara otomatis menjadi objek pertama dalam tupel, yaitu objek garis yang Anda inginkan.

http://matplotlib.sourceforge.net/users/legend_guide.html#adjusting-the-order-of-legend-items

baris, = plot (x, sin (x)) apa arti koma?


2
Bisakah Anda menyalin / menambahkan penjelasan di sini? stackoverflow mendorong menyalin bagian yang relevan di tempat (menyoroti, mengarsipkan)
n611x007

16

Gunakan kata kunci "label", seperti ini:

pyplot.plot(x, y, label='x vs. y')

lalu tambahkan legenda seperti ini:

pyplot.legend()

Legenda akan mempertahankan properti garis seperti ketebalan, warna, dll.

masukkan deskripsi gambar di sini


9

Gunakan handlesAKAProxy artists

import matplotlib.lines as mlines
import matplotlib.pyplot as plt
# defining legend style and data
blue_line = mlines.Line2D([], [], color='blue', label='My Label')
reds_line = mlines.Line2D([], [], color='red', label='My Othes')

plt.legend(handles=[blue_line, reds_line])

plt.show()

-1

gunakan label saat merencanakan grafik maka hanya u yang dapat menggunakan legenda. nama sumbu x dan nama sumbu y berbeda dengan nama legenda.

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.