web-dev-qa-db-fra.com

Aucune poignée avec des étiquettes trouvées pour mettre dans la légende

J'essaie de créer un parallélogramme dans PyPlot. Je ne suis pas en train de dessiner le parallélogramme - je mets d'abord les flèches vectorielles - en utilisant le code suivant:

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

Cela renvoie l'erreur suivante:

No handles with labels found to put in legend.

Je ne sais pas pourquoi, car, d'après la documentation de plt.arrow(), label est un kwarg acceptable, et plt.legend() devrait ostensiblement lire cela. Le reste de la figure dessine bien; il manque juste la légende.

2
Yehuda

Vous pouvez définir explicitement les éléments dans la légende.

Pour un contrôle total des artistes qui ont une entrée de légende, il est possible de passer respectivement un itérable d'artistes de légende suivi d'un itérable d'étiquettes de légende. Référence

Exemple:

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