Pyplot:仅显示图例中的前3行

时间:2013-12-16 22:17:22

标签: python matplotlib

我正在运行200次模拟,并将3个输出列表绘制为3行,具有高透明度。这允许我显示模拟之间的差异。

问题是我的图例显示3x200项而不是3项。如何让它一次显示每行的图例?

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

3 个答案:

答案 0 :(得分:16)

添加

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

对于您不想在图例中显示的任何绘图。因此,在您的代码中,您可以执行以下操作:

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

和其他人类似,或者如果你不喜欢iffy代码:

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

答案 1 :(得分:9)

为了避免在绘图中使用额外的逻辑,请使用“代理”艺术家作为图例条目:

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

答案 2 :(得分:2)

您还可以如下修改plt.legend()的参数,除了前三个图例条目之外的所有条目都将被隐藏:

plt.legend(['susceptible', 'recovered', 'infected'])