未找到带有可放入图例的标签的手柄

时间:2019-12-15 18:12:13

标签: python matplotlib legend

我正在尝试在PyPlot中创建平行四边形。我不愿使用以下代码绘制平行四边形-首先我将矢量箭头放入其中:

fig = plt.figure()
ax = fig.add_subplot(111)
ax.spines['left'].set_position('zero')
ax.spines['right'].set_color('none')
ax.spines['bottom'].set_position('zero')
ax.spines['top'].set_color('none')
plt.axis([-5,5,-5,5])
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
plt.grid()
plt.arrow(0,0, 3,1, head_width=0.2, color='r', length_includes_head=True, label='u')
plt.arrow(0,0, 1,3, head_width=0.2, color='r', length_includes_head=True, label='v')
plt.arrow(0,0, 4,4, head_width=0.2, color='r', length_includes_head=True, label='u+v')
plt.legend()

这将返回以下错误:

No handles with labels found to put in legend.

我不确定为什么,因为根据plt.arrow()的文档,label是可以接受的kwarg,而plt.legend()表面上应该在阅读。图的其余部分很好。它只是缺少传说。

3 个答案:

答案 0 :(得分:2)

这可能很困难,但是对于有相同问题的任何人,解决方案都将legend()方法用于相应的斧头,而不是plt

fig = plt.figure()
ax = fig.add_subplot(111)
ax.spines['left'].set_position('zero')
ax.spines['right'].set_color('none')
ax.spines['bottom'].set_position('zero')
ax.spines['top'].set_color('none')
plt.axis([-5,5,-5,5])
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
plt.grid()
plt.arrow(0,0, 3,1, head_width=0.2, color='r', length_includes_head=True, label='u')
plt.arrow(0,0, 1,3, head_width=0.2, color='r', length_includes_head=True, label='v')
plt.arrow(0,0, 4,4, head_width=0.2, color='r', length_includes_head=True, label='u+v')
ax.legend()

答案 1 :(得分:1)

您可以在图例中明确定义元素。

  

要完全控制哪些艺术家具有传奇条目,可以传递可迭代的传奇艺术家,然后分别传递可迭代的传奇标签。 Reference

示例:

arr1 = plt.arrow(0,0, 3,1, head_width=0.2, color='r', length_includes_head=True)
arr2 = plt.arrow(0,0, 1,3, head_width=0.2, color='g', length_includes_head=True)
arr3 = plt.arrow(0,0, 4,4, head_width=0.2, color='b', length_includes_head=True)

plt.xlim(0,5)
plt.ylim(0,5)

plt.legend([arr1, arr2, arr3], ['u','v','u+v'])

enter image description here

答案 2 :(得分:0)

由于未指定标签文本而引发错误

要么做这样的事

plt.hist([x01, x02,x03], color=["lightcoral","lightskyblue","slategrey"], stacked=True, label=['Supressed','Active','Resolved'])
plt.legend()

如果未指定标签文本,请勿使用plt.legend()

plt.hist([x01])
plt.legend()

以上内容将引发相同的错误,因此请删除图例功能或提供所需的功能->标签。 注意:x01只是我要为其创建直方图的数字的列表,在第一个示例中,它们是三个数字列表,用于创建堆叠的条形图

最重要的是,由于未指定图例文本和调用/初始化图例而引发此错误