如何使用Matplotlib获得N种易于区分的颜色

ljo96ir5  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(111)

我需要用Matplotlib制作不同数量的线图,但我还没有找到一个颜色图,可以很容易地区分线图。我使用了brg colormap是这样的:

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

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

如果有四个图,这可能看起来像这样:

请注意,区分顶部和底部图的颜色是多么困难,如果使用图例,这尤其糟糕。我试过很多不同的颜色贴图,比如rainbow和jet,但是在这个设置下,brg似乎在1到12之间给出了最好的结果。
我确实找到了这个How to get 10 different colors that are easily recognizable和这个wiki页面Help:Distinguishable colors,但我不知道这是否可以以任何方式使用。
有什么好解决的办法吗,还是我只能将就一下?

ppcbkaq5

ppcbkaq51#

我会使用tab10tab20色彩Map表。参见Colormap reference

然而,我相信当线条的数量变得很大(我会说> 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()

相关问题