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.

Mike Vella
sumber

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?

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

Ytsen de Boer
sumber
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()
ppaulojr
sumber
-1

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

Java Oleh Kiran
sumber