我正在运行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()
答案 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'])