web-dev-qa-db-ja.com

凡例に入れるラベルが付いたハンドルはありません

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()は表面的にはそれを読んでいるはずなので、理由はわかりません。図の残りの部分はうまく描画されます。伝説が欠けているだけです。

2
Yehuda

凡例の要素を明示的に定義できます。

凡例エントリを持つアーティストを完全に制御するには、凡例アーティストのイテラブルとそれに続く凡例ラベルのイテラブルをそれぞれ渡すことができます。 参考

例:

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

3
abc