1. ホーム
  2. その他

[解決済み】凡例に入れるラベルを持つハンドルが見つからない

2022-01-03 05:26:26

質問

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 は許容されるクワーグであり plt.legend() は表向きはそう読むはずです。残りの部分は問題なく描画されます。

どのように解決するのですか?

遅ればせながら、同じ問題を抱える方のために、解決策をご紹介します。 legend() に対応する ax ではなく 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()