Geen handvatten met labels gevonden om in legenda te plaatsen

Ik probeer een parallellogram te maken in PyPlot. Ik ben niet in staat om het parallellogram te tekenen – eerst plaats ik de vectorpijlen – met behulp van de volgende code:

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

Dit geeft de volgende fout:

No handles with labels found to put in legend.

Ik weet niet zeker waarom, omdat, op basis van de documentatie voor plt.arrow(), labeleen acceptabele kwarg is, en plt.legend()zou dat ogenschijnlijk moeten lezen. De rest van de figuur tekent prima; het mist gewoon de legende.


Antwoord 1, autoriteit 100%

Het kan laat zijn, maar voor iedereen met hetzelfde probleem is de oplossing het gebruik van de methode legend()voor de corresponderende axniet zoals voor 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()

Antwoord 2, autoriteit 68%

U kunt de elementen in de legenda expliciet definiëren.

Voor volledige controle over welke artiesten een legenda-invoer hebben, is het mogelijk om een herhaling van legendeartiesten door te geven, gevolgd door een herhaling van respectievelijk legendelabels. Referentie

Voorbeeld:

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'])


Antwoord 3, autoriteit 11%

De fout treedt op omdat u de labeltekst niet heeft opgegeven

Doe zoiets als dit

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

Of

Gebruik nietplt.legend() als u de labeltekst niet hebt opgegevenzoals in het volgende VERKEERDE voorbeeld:

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

Het bovenstaande geeft dezelfde fout, dus verwijder de legendafunctie of geef wat het nodig heeft -> label.
Kanttekening: hier is x01 slechts een lijst met getallen waarvoor ik een histogram maak, in het eerste voorbeeld zijn het drie lijst met getallen om een gestapeld staafdiagram te maken

Waar het op neerkomt, is dat deze fout wordt gegenereerd omdat er geen legendatekst is opgegeven en een legenda wordt aangeroepen/geïnitialiseerd

Other episodes