如何为matplotlib中的每个绘制线选择一种新颜色?

dla*_*tte 88 matplotlib

我不想为每个绘制的线指定颜色:

from matplotlib import pyplot as plt
for i in range(20):
    plt.plot([0, 1], [i, i])

plt.show()
Run Code Online (Sandbox Code Playgroud)

如果您为此查看图像,matplotlib会尝试为每行不同的颜色选择颜色,但最终会重新使用颜色.我只是想阻止它重复已经使用的颜色和/或提供一个颜色列表来使用.

小智 93

我通常使用这3个中的第3个,我也不会检查1和2版本.

from matplotlib.pyplot import cm
import numpy as np

#variable n below should be number of curves to plot

#version 1:

color=cm.rainbow(np.linspace(0,1,n))
for i,c in zip(range(n),color):
   plt.plot(x, y,c=c)

#or version 2:

color=iter(cm.rainbow(np.linspace(0,1,n)))
for i in range(n):
   c=next(color)
   plt.plot(x, y,c=c)
Run Code Online (Sandbox Code Playgroud)

3的例子: 使用iter的示例图,下一个颜色

  • 为了方便起见,可以在循环之前说“cmap = plt.get_cmap('rainbow', n)”。然后循环体内的`color = cmap(i)`。不需要额外的进口。 (3认同)

tom*_*m10 53

在1.0以上版本的matplotlib中,您可以使用axes.set_prop_cycle(参见示例),在旧版本中,axes.set_color_cycle(参见示例).

  • @xyld - 不要过多地插入我自己的答案,但这个答案的底部有一个例子:http://stackoverflow.com/questions/4805048/how-to-get-different-lines-for-different-plots -in-a-single-figure/4805456#4805456基本上你只需要这样做:`[colormap(i)for i in np.linspace(0,0.9,num_plots)]`,其中`colormap`是其中一个彩色图`matplotlib.pyplot.cm`和`numplots`是你想要的唯一颜色的数量.请注意,这可能导致颜色难以彼此区分,但!! (16认同)
  • 很好的回答Joe,它似乎回答了xyld的问题,所以我就把它留在这里.此外,值得注意的是,有关生成不同颜色的问题有一些很好的答案,例如http://stackoverflow.com/questions/470690/how-to-automatically-generate-n-distinct-colors/4382138# 4382138 (4认同)

Cir*_*四事件 10

prop_cycle

color_cycle在1.5中被弃用,赞成这种概括:http://matplotlib.org/users/whats_new.html#added-axes-prop-cycle-key-to-rcparams

# cycler is a separate package extracted from matplotlib.
from cycler import cycler
import matplotlib.pyplot as plt

plt.rc('axes', prop_cycle=(cycler('color', ['r', 'g', 'b'])))
plt.plot([1, 2])
plt.plot([2, 3])
plt.plot([3, 4])
plt.plot([4, 5])
plt.plot([5, 6])
plt.show()
Run Code Online (Sandbox Code Playgroud)

同样显示在(现在命名很差的)示例中:http://matplotlib.org/1.5.1/examples/color/color_cycle_demo.html提到:https://stackoverflow.com/a/4971431/895245

在matplotlib 1.5.1中测试.


And*_*ini 7

我不知道你是否可以自动更改颜色,但你可以利用你的循环生成不同的颜色:

for i in range(20):
   ax1.plot(x, y, color = (0, i / 20.0, 0, 1)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,颜色将从黑色变为100%绿色,但您可以根据需要进行调整.

请参阅matplotlib plot()文档并查找color关键字参数.

如果要提供颜色列表,只需确保列表足够大,然后使用循环索引选择颜色

colors = ['r', 'b', ...., 'w']

for i in range(20):
   ax1.plot(x, y, color = colors[i])
Run Code Online (Sandbox Code Playgroud)


jim*_*qaz 7

您可以使用预定义的“定性颜色图”,如下所示:

from matplotlib.cm import get_cmap

name = "Accent"
cmap = get_cmap(name)  # type: matplotlib.colors.ListedColormap
colors = cmap.colors  # type: list
axes.set_prop_cycle(color=colors)
Run Code Online (Sandbox Code Playgroud)

在 matplotlib 3.0.3 上测试。见https://github.com/matplotlib/matplotlib/issues/10840讨论为什么你不能打电话axes.set_prop_cycle(color=cmap)

https://matplotlib.org/gallery/color/colormap_reference.html提供了预定义的定性颜色图列表:

定性色图列表