Perché plt.plot
può tracciare più di una riga alla volta, restituisce una lista di line2D
oggetti , anche se si traccia una sola riga (cioè nel tuo caso, una lista di lunghezza 1). Quando si prende il suo handle per la legenda, si desidera utilizzare solo la prima voce di questo elenco (l'oggetto effettivo line2D
).
ci sono (almeno) due modi in cui è possibile risolvere questo:
1) aggiungere una virgola dopo normplt
quando si chiama plt.plot
, per memorizzare solo il primo elemento dall'elenco nel normplt
barplt = plt.bar(bins,frq,width,align='center',label='Dgr')
normplt, = plt.plot(bins_n,frq_n,'--r', label='Norm') # note the comma after normplt
print normplt
# Line2D(Norm) <-- This is the line2D object, not a list, so we can use it in legend
...
plt.legend(handles=[barplt,normplt])
2) Utilizzare solo il primo elemento della lista quando si chiama plt.legend
(normplt[0]
):
barplt = plt.bar(bins,frq,width,align='center',label='Dgr')
normplt = plt.plot(bins_n,frq_n,'--r', label='Norm')
print normplt
# [<matplotlib.lines.Line2D object at 0x112076710>]
# Note, this is a list containing the Line2D object. We just want the object,
# so we can use normplt[0] in legend
...
plt.legend(handles=[barplt,normplt[0]])
si domanda wou Sono stato migliorato pubblicando il * traceback completo *. Ciò avrebbe individuato la linea che ha causato il problema e ha aiutato le persone a rispondere alla domanda. Inoltre ti avrebbe aiutato a risolvere il tuo problema. Se la tua domanda fosse stata scritta con più attenzione, potrebbe aver ricevuto un upvote. –