因为plt.plot
可以一次绘制多条线,所以它返回line2D
个对象的列表,即使您只绘制一条线(即,在您的情况下,长度为1的列表).抓取图例的句柄时,只需使用此列表的第一项(实际的line2D
对象).
有(至少)两种方法可以解决这个问题:
1) 当你调用plt.plot
时,在normplt
后面加一个逗号,只将列表中的第一项存储在normplt
中
barplt = plt.bar(bins,frq,width,align='center',label='Dgr')
normplt, = plt.plot(bins_n,frq_n,'--r', label='Norm') # note the comma after normplt
print normplt
# Line2D(Norm) <-- This is the line2D object, not a list, so we can use it in legend
...
plt.legend(handles=[barplt,normplt])
2) 拨打plt.legend
(normplt[0]
)时,仅使用列表中的第一项:
barplt = plt.bar(bins,frq,width,align='center',label='Dgr')
normplt = plt.plot(bins_n,frq_n,'--r', label='Norm')
print normplt
# [<matplotlib.lines.Line2D object at 0x112076710>]
# Note, this is a list containing the Line2D object. We just want the object,
# so we can use normplt[0] in legend
...
plt.legend(handles=[barplt,normplt[0]])