如何防止 Matplotlib 重复使用颜色?

9

我有这段代码:

plist = ['p5', 'p14', 'p23', 'p32', 'p41', 'p50', 'p59', 'p68', 'p77', 'p85', 'p95']


for pltcount in range(len(plist)):
    plt.plot(data1[pltcount], np.exp(data2)[pltcount], marker='o', label=str(plist[pltcount]))
plt.legend()
plt.show()

使用plt.style.use('fivethirtyeight')可以使图表看起来更好。我发现有些例子是手动分配颜色的。如果我想要自动分配颜色,而且从一些知名的调色板获取呢?

enter image description here

1个回答

10

彩虹的颜色如何?这里的关键是使用 ax.set_prop_cycle 为每条线指定颜色。

NUM_COLORS = len(plist)

cm = plt.get_cmap('gist_rainbow')
fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_prop_cycle('color', [cm(1.*i/NUM_COLORS) for i in range(NUM_COLORS)])
# Or,
# ax.set_prop_cycle(color=[cm(1.*i/NUM_COLORS) for i in range(NUM_COLORS)])
for i, p in enumerate(plist):
    ax.plot(data1[i], np.exp(data2)[i], marker='o', label=str(p))

plt.legend()
plt.show()

参考来源,其他选项也可行。


1
非常感谢!我认为NUM_COLORS应该是len(plist)。完美的运作了! - maximusdooku
我确实收到了这个警告:set_color_cycle函数在1.5版本中已被弃用。请改用.set_prop_cycle - maximusdooku
1
目前,如果我将其替换为set_prop_cycle,则会出现以下错误:TypeError: If only one positional argument given, it must be a Cycler instance.1正在检查语法... - maximusdooku
@maximusdooku,我做了一些研究并编辑了我的答案。这样行吗? - cs95
太棒了!现在完美了。 - maximusdooku

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接