Matplotlib Legends không hoạt động


96

Kể từ khi nâng cấp matplotlib, tôi gặp lỗi sau bất cứ khi nào cố gắng tạo huyền thoại:

/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),))

Điều này thậm chí xảy ra với một tập lệnh tầm thường như thế này:

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

Tôi đã tìm thấy liên kết mà lỗi chỉ cho tôi khá vô ích trong việc chẩn đoán nguồn gốc của lỗi.

Câu trả lời:


164

Bạn nên thêm dấu phẩy:

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

Lý do bạn cần dấu phẩy là vì plt.plot () trả về nhiều đối tượng dòng, bất kể có bao nhiêu đối tượng thực sự được tạo từ lệnh. Không có dấu phẩy, "plot1" và "plot2" là các bộ giá trị thay vì các đối tượng dòng, khiến cho lệnh gọi plt.legend () sau này không thành công.

Dấu phẩy ngầm giải nén các kết quả để thay vì một tuple, "plot1" và "plot2" tự động trở thành các đối tượng đầu tiên trong bộ tuple, tức là các đối tượng dòng bạn thực sự muốn.

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

line, = plot (x, sin (x)), dấu phẩy đại diện cho điều gì?


2
bạn có thể sao chép / thêm lời giải thích ở đây? stackoverflow khuyến khích sao chép phần có liên quan tại chỗ (làm nổi bật, lưu trữ)
n611x007

16

Sử dụng từ khóa "nhãn", như sau:

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

và sau đó thêm chú thích như vậy:

pyplot.legend()

Chú giải sẽ giữ lại các thuộc tính của đường như độ dày, màu sắc, v.v.

nhập mô tả hình ảnh ở đây


9

Sử dụng 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

sử dụng nhãn trong khi vẽ biểu đồ thì chỉ u mới có thể sử dụng chú giải. tên trục x và tên trục y khác với tên chú giải.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.