2013-12-16 1 views
10

私はシミュレーションを200回実行しており、3つの出力リストを透明度の高い3行としてプロットしています。これにより、シミュレーション間の分散を表示することができます。Pyplot:凡例の最初の3行を表示

問題は私の凡例が3つのアイテムの代わりに3x200個のアイテムを表示していることです。各行の凡例を一度表示するにはどうすればよいですか?

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

答えて

16

あなたは伝説に表示したくないプロットのための

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

を追加します。他の人のための

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

と同様に、またはあなたがあやふやなコードが好きではない場合:ので、あなたのコードでは、たとえば行うことができ

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

'label = None'も設定する必要があります。 – tacaswell

+0

@tacaswellの設定 'label = None'は実際には微妙に異なり、凡例からアーティストを削除しません。たとえば、次のようになります。 'plt.plot([0,1]、[0,1]、label = None); plt.plot([0,1]、[1,0]); plt.legend(['justthislabel']) 'は凡例に2つの項目を表示します。 'None'を' '_nolegend_''に置き換えると、1つしか得られません。 – oLas

8

あなたのプロットに余分なロジックを回避するために、「プロキシ」を使用します凡例のアーティスト:

# 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

これについての良いことは、もしあなたがあなたのlinelabelsを解析するためにtexを使うなら、それが働くことです。私はそれに対応するために '_nolegend_'を得ることができませんでした。 – user35915

関連する問題