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)
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()
import matplotlib as mpl
import matplotlib.pyplot as mpl
import numpy as np
colors = mpl.colormaps.get_cmap('viridis').resampled(20).colors
for i, color in enumerate(colors):
plt.plot([0, 1], [i, i], color=color)
plt.show()
cmap = mpl.colormaps.get_cmap('summer').resampled(20)
colors = cmap(np.arange(0, cmap.N))
for i, color in enumerate(colors):
plt.plot([0, 1], [i, i], color=color)
plt.show()
8条答案
按热度按时间ui7jx7zq1#
我通常使用其中的第二个:
示例2:
djp7away2#
matplotlib 1.5+
您可以使用
axes.set_prop_cycle
(example)。matplotlib 1.0-1.4
您可以使用
axes.set_color_cycle
(example)。matplotlib 0.x
可以使用
Axes.set_default_color_cycle
。dohp0rv53#
您可以使用预定义的“定性色彩Map表”,如下所示:
在matplotlib 3.0.3上测试。有关不能调用
axes.set_prop_cycle(color=cmap)
的原因,请参阅https://github.com/matplotlib/matplotlib/issues/10840。https://matplotlib.org/gallery/color/colormap_reference.html提供了预定义的定性色彩Map表列表:
1tu0hz3e4#
prop_cycle
color_cycle
在1.5中被弃用,以支持以下概括:http://matplotlib.org/users/whats_new.html#added-axes-prop-cycle-key-to-rcparams也显示在(现在命名错误)示例中:http://matplotlib.org/1.5.1/examples/color/color_cycle_demo.html提到:https://stackoverflow.com/a/4971431/895245
在matplotlib 1.5.1中测试。
vuktfyat5#
我不知道你是否可以自动改变颜色,但你可以利用你的循环来生成不同的颜色:
在这种情况下,颜色将从黑色到100%绿色不等,但您可以根据需要调整。
参见matplotlib plot()文档并查找
color
关键字参数。如果你想馈送一个颜色列表,只要确保你有一个足够大的列表,然后使用循环的索引来选择颜色
yzckvree6#
正如Ciro's answer所指出的,您可以使用
prop_cycle
设置matplotlib要循环的颜色列表。有多少种颜色?如果你想用相同的颜色循环来绘制许多不同行数的图,该怎么办?一种策略是使用类似于https://gamedev.stackexchange.com/a/46469/22397的公式来生成一个无限的颜色序列,其中每个颜色都试图与之前的所有颜色显着不同。
不幸的是,
prop_cycle
不接受无限序列--如果你传递一个,它将永远挂起。但是我们可以取,比如说,从这样一个序列中生成的前1000种颜色,并将其设置为颜色循环。这样,对于具有任何合理数量的线的图,您应该获得可区分的颜色。示例:
输出:
现在,所有的颜色都不一样了--尽管我承认我很难分辨出其中的几种!
8ljdwjyq7#
您还可以在
matplotlibrc
文件中更改默认颜色循环。如果你不知道这个文件在哪里,在python中执行以下操作:这将显示当前使用的matplotlibrc文件的路径。在该文件中,您将在许多其他设置中找到
axes.color.cycle
的设置。只要把你想要的颜色序列,你会发现它在每一个情节,你使。注意,你也可以在matplotlib中使用所有有效的html颜色名称。t0ybt7op8#
matplotlib.cm.get_cmap
和matplotlib.pyplot.cm.get_cmap
已从matplotlib 3.7.0
弃用matplotlib.colormaps[name]
或matplotlib.colormaps.get_cmap(obj)
代替。.get_cmap
不再具有lut
参数。使用.resampled
cmap = mpl.colormaps.get_cmap('viridis').resampled(20)
创建matplotlib.colors.ListedColormap
对象。cmap = mpl.colormaps['viridis'].resampled(20)
colors = mpl.colormaps.get_cmap('viridis').resampled(20).colors
创建一个颜色数数组。.colors
将从ListedColormap
中提取颜色数组,但不适用于LinearSegmentedColormap
,如杂项色彩Map表中所示。colors = cmap(np.arange(0, cmap.N))