Matplotlib Legends ไม่ทำงาน


99

นับตั้งแต่อัปเกรด matplotlib ฉันได้รับข้อผิดพลาดต่อไปนี้ทุกครั้งที่พยายามสร้างตำนาน:

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

สิ่งนี้เกิดขึ้นกับสคริปต์เล็กน้อยเช่นนี้:

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

ฉันพบลิงก์ที่ข้อผิดพลาดชี้ให้ฉันเห็นว่าไร้ประโยชน์ในการวินิจฉัยแหล่งที่มาของข้อผิดพลาด

คำตอบ:


170

คุณควรเพิ่มจุลภาค:

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

เหตุผลที่คุณต้องใช้เครื่องหมายจุลภาคเป็นเพราะ plt.plot () ส่งคืนทูเพิลของอ็อบเจกต์บรรทัดไม่ว่าจะสร้างจากคำสั่งจริงๆ หากไม่มีเครื่องหมายจุลภาค "plot1" และ "plot2" จะเป็นทูเปิลแทนอ็อบเจ็กต์บรรทัดทำให้การเรียก plt.legend () ในภายหลังล้มเหลว

เครื่องหมายจุลภาคจะคลายผลลัพธ์ออกมาโดยปริยายดังนั้นแทนที่จะเป็นทูเปิล "plot1" และ "plot2" จะกลายเป็นอ็อบเจ็กต์แรกในทูเปิลโดยอัตโนมัตินั่นคืออ็อบเจกต์เส้นที่คุณต้องการจริงๆ

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

line, = plot (x, sin (x)) ลูกน้ำหมายถึงอะไร?


2
คุณสามารถคัดลอก / เพิ่มคำอธิบายที่นี่ได้ไหม stackoverflow สนับสนุนการคัดลอกส่วนที่เกี่ยวข้องในไซต์ (การเน้นการเก็บถาวร)
n611x007

20

ใช้คีย์เวิร์ด "label" ดังนี้:

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

จากนั้นเพิ่มตำนานดังนี้:

pyplot.legend()

คำอธิบายแผนภูมิจะยังคงคุณสมบัติของเส้นเช่นความหนาสี ฯลฯ

ป้อนคำอธิบายภาพที่นี่


9

ใช้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

ใช้ป้ายกำกับขณะพล็อตกราฟจากนั้นมีเพียงคุณเท่านั้นที่สามารถใช้คำอธิบายแผนภูมิได้ ชื่อแกน x และชื่อแกน y แตกต่างจากชื่อตำนาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.