2013-12-16 12 views
10

Ich führe eine Simulation 200 Mal und zeichne die 3 Ausgabelisten als 3 Zeilen mit hoher Transparenz. Dies erlaubt mir, Unterschiede zwischen den Simulationen zu zeigen.Pyplot: zeige nur die ersten 3 Zeilen in der Legende

Das Problem ist, dass meine Legende 3x200 Elemente statt 3 Elemente zeigt. Wie bekomme ich es, die Legende für jede Zeile einmal anzuzeigen?

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

Antwort

16

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

für jede Plotten hinzufügen, die Sie nicht wollen, in der Legende zu zeigen. so in Ihrem Code können Sie zum Beispiel tun:

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

und in ähnlicher Weise für andere, oder wenn Sie nicht strittig Code mögen:

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

Einstellung 'label = None' sollte auch funktionieren. – tacaswell

+0

@tacaswell Einstellung 'label = None' ist tatsächlich subtil anders und entfernt den Künstler nicht aus der Legende. Zum Beispiel: 'plt.plot ([0,1], [0,1], Label = None); plot.plot ([0,1], [1,0]); plt.legend (['justthislabel']) 'zeigt zwei Elemente in der Legende an. Das Ersetzen von 'None' durch' _nolegend_' ergibt nur eins. – oLas

8

Um zusätzliche Logik in Ihren Plotten zu vermeiden, verwenden Sie ‚Proxy‘ Künstler für Ihre Legende Einträge:

# 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

Das gute daran ist, dass es auch funktioniert, wenn Sie tex verwenden, um Ihre Linelabels zu analysieren. Ich konnte nicht 'nolegend_' damit arbeiten. – user35915

Verwandte Themen