2016-04-26 28 views
6

Ho bisogno di tracciare più serie di dati sullo stesso grafico, e io uso matplotlib.Ordine in legenda grafici python

Per alcuni dei grafici uso plt.plot() e per gli altri utilizzo plt.errorbar(). Ma quando creo una leggenda, quelli creati con plt.plot() vengono visualizzati per primi, indipendentemente dall'ordine in cui li inserisco nel file (e zorder sembra non avere alcun effetto sulla posizione nella legenda).

Come posso dare l'ordine che desidero nella legenda, indipendentemente dal modo in cui tracciamo i dati?

risposta

13

È possibile regolare manualmente l'ordine, ottenendo le maniglie e le etichette della legenda utilizzando ax.get_legend_handles_labels, quindi riordinando gli elenchi risultanti e alimentandoli su ax.legend. In questo modo:

import matplotlib.pyplot as plt 
import numpy as np 

fig,ax = plt.subplots(1) 

ax.plot(np.arange(5),np.arange(5),'bo-',label='plot1') 
ax.errorbar(np.arange(5),np.arange(1,6),yerr=1,marker='s',color='g',label='errorbar') 
ax.plot(np.arange(5),np.arange(2,7),'ro-',label='plot2') 

handles,labels = ax.get_legend_handles_labels() 

handles = [handles[0], handles[2], handles[1]] 
labels = [labels[0], labels[2], labels[1]] 

ax.legend(handles,labels,loc=2) 
plt.show() 

enter image description here