Answers:
您可以使用axes.set_prop_cycle
(示例)。
您可以使用axes.set_color_cycle
(示例)。
您可以使用Axes.set_default_color_cycle
。
[colormap(i) for i in np.linspace(0, 0.9, num_plots)]
,其中colormap
在颜色表的一个matplotlib.pyplot.cm
和numplots
是多少您想要的独特颜色。但是请注意,这会导致难以区分的颜色!
我通常使用其中的第二个:
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)
示例2:
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()
也显示在(现在的重命名)示例中:http : //matplotlib.org/1.5.1/examples/color/color_cycle_demo.html,网址为:https : //stackoverflow.com/a/4971431/895245
在matplotlib 1.5.1中测试。
我不知道是否可以自动更改颜色,但是可以利用循环来生成不同的颜色:
for i in range(20):
ax1.plot(x, y, color = (0, i / 20.0, 0, 1)
在这种情况下,颜色会从黑色到100%绿色不等,但是您可以根据需要对其进行调整。
请参阅matplotlib plot()文档,并寻找color
关键字参数。
如果要提供颜色列表,只需确保列表足够大,然后使用循环索引选择颜色
colors = ['r', 'b', ...., 'w']
for i in range(20):
ax1.plot(x, y, color = colors[i])
您可以使用预定义的“定性颜色图”,如下所示:
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)
在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上获得预定义的定性颜色图列表:
作为Ciro的答案,您可以prop_cycle
用来设置供matplotlib循环使用的颜色列表。但是有多少种颜色?如果要对许多具有不同线数的图使用相同的颜色周期怎么办?
一种策略是使用类似于https://gamedev.stackexchange.com/a/46469/22397中的公式的公式,以生成无限的颜色序列,其中每种颜色都试图与其之前的所有颜色都显着不同。
不幸的是,prop_cycle
不会接受无限序列-如果您传递无限序列,它将永远挂起。但是我们可以说,从这样一个序列生成的前1000种颜色,并将其设置为颜色周期。这样,对于具有任意数量线的图,您应该获得可区分的颜色。
例:
from matplotlib import pyplot as plt
from matplotlib.colors import hsv_to_rgb
from cycler import cycler
# 1000 distinct colors:
colors = [hsv_to_rgb([(i * 0.618033988749895) % 1.0, 1, 1])
for i in range(1000)]
plt.rc('axes', prop_cycle=(cycler('color', colors)))
for i in range(20):
plt.plot([1, 0], [i, i])
plt.show()
输出:
现在,所有颜色都是不同的-尽管我承认我很难区分其中的一些!