2013-12-16 2 views
10

Sto eseguendo una simulazione 200 volte e tracciando le 3 liste di output come 3 linee con elevata trasparenza. Questo mi permette di mostrare la varianza tra le simulazioni.Pyplot: mostra solo le prime 3 righe nella legenda

Il problema è che la mia leggenda mostra articoli 3x200 invece di 3 articoli. Come faccio a mostrare la legenda per ogni riga una volta?

for simulation in range(200): 
    plt.plot(num_s_nodes, label="susceptible", color="blue", alpha=0.02) 
    plt.plot(num_r_nodes, label="recovered", color="green", alpha=0.02) 
    plt.plot(num_i_nodes, label="infected", color="red", alpha=0.02) 
plt.legend() 
plt.show() 

risposta

16

aggiungere

plt.plot(... , label='_nolegend_') 

per qualsiasi tracciato che non si desidera visualizzare nella leggenda. così nel codice si può ad esempio fare:

..., label='_nolegend_' if simulation else 'susceptible', ... 

e allo stesso modo per gli altri, o se non ti piace il codice incerto:

..., label=simulation and '_nolegend_' or 'susceptible',... 
+2

Impostazione 'label = none' dovrebbero anche lavorare. – tacaswell

+0

l'impostazione @tacaswell 'label = None' è in realtà leggermente diversa e non rimuove l'artista dalla legenda. Ad esempio: 'plt.plot ([0,1], [0,1], label = None); plt.plot ([0,1], [1,0]); plt.legend (['justthislabel']) 'mostrerà due elementi nella legenda. Sostituendo 'Nessuno' con' '_nolegend_'' ne produce solo uno. – oLas

8

Per evitare la logica in più nel vostro tracciato, uso 'delega' artisti per le vostre voci di legenda:

# no show lines for you ledgend 
plt.plot([], label="susceptible", color="blue", alpha=0.02) 
plt.plot([], label="recovered", color="green", alpha=0.02) 
plt.plot([], label="infected", color="red", alpha=0.02) 

for simulation in range(200): 
    # your actual lines 
    plt.plot(num_s_nodes, color="blue", alpha=0.02) 
    plt.plot(num_r_nodes, color="green", alpha=0.02) 
    plt.plot(num_i_nodes, color="red", alpha=0.02) 
plt.legend() 
plt.show() 
+0

La cosa buona è che funziona anche se si usa tex per analizzare i linelabels. Non potevo ottenere "nolegend_" per lavorare con quello. – user35915