繁体   English   中英

如何使用 Matplotlib 获得 N 易于区分的 colors

[英]How to get N easily distinguishable colors with Matplotlib

我需要使用 Matplotlib 制作不同数量的线图,但我一直无法找到可以轻松区分线图的颜色图。 我已经像这样使用了 brg 颜色图:

colors=brg(np.linspace(0,1,num_plots))

for i in range(num_plots):
    ax.step(x,y,c=colors[i])

有四个地块,这可能看起来像这样:

请注意区分顶部和底部图的 colors 是多么困难,如果使用图例,这尤其糟糕。 我已经尝试了很多不同的颜色图,比如 Rainbow 和 jet,但是通过这种设置,brg 似乎为 1 到 12 之间的num_plots提供了最好的结果。

我确实找到了如何获得 10 种易于识别的不同 colors和此 Wiki 页面Help:Distinguishable colors ,但我不知道这是否可以以任何方式使用。

有一个简单的解决方法吗,还是我必须解决这个问题?

我会使用tab10tab20颜色图。 请参阅颜色图参考

在此处输入图像描述

但是,我相信当线条数量变大时(我会说 >5 并且肯定 >10),您将始终难以区分色调。 在这种情况下,您应该将色调与其他显着特征(如不同的标记或线条样式)结合起来。

colors = matplotlib.cm.tab20(range(20))
markers = matplotlib.lines.Line2D.markers.keys()
x = np.linspace(0,1,100)

fig, axs = plt.subplots(2,4, figsize=(4*4,4*2))
for nlines,ax0 in zip(np.arange(5,21,5), axs.T):
    ax0[0].set_title('{:d} lines'.format(nlines))
    for n,c,m in zip(range(nlines),colors,markers):
        y = x*np.random.random()+np.random.random()
        ax0[0].plot(x,y)
        ax0[1].plot(x,y, marker=m, markevery=10)
axs[0,0].set_ylabel('only hues', fontsize=16, fontweight='bold')
axs[1,0].set_ylabel('hues+markers', fontsize=16, fontweight='bold')
fig.tight_layout()

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM