根据给定的colormap在matplotlib中创建颜色生成器

22 投票
1 回答
29440 浏览
提问于 2025-04-15 23:48

我有一系列的线条,每条线都需要用不同的颜色来绘制。其实每条线是由多个数据集组成的(比如正值、负值区域等等),所以我想创建一个生成器,能够一次提供一种颜色,像是gist_rainbow这个颜色图谱这里展示的那样.

我发现下面的方法可以实现这个功能,但看起来非常复杂,而且更重要的是,记起来很困难。

from pylab import *

NUM_COLORS = 22

mp = cm.datad['gist_rainbow']
get_color = matplotlib.colors.LinearSegmentedColormap.from_list(mp, colors=['r', 'b'], N=NUM_COLORS)
...
# Then in a for loop
    this_color = get_color(float(i)/NUM_COLORS)

而且,这个方法没有覆盖gist_rainbow颜色图谱中的所有颜色,我还得重新定义一个颜色图。

也许使用生成器并不是最好的办法,如果是这样的话,有什么更合适的方法呢?

1 个回答

37

要从特定的颜色映射中获取颜色,你可以使用:

import pylab
NUM_COLORS = 22

cm = pylab.get_cmap('gist_rainbow')
for i in range(NUM_COLORS):
    color = cm(1.*i/NUM_COLORS)  # color will now be an RGBA tuple

# or if you really want a generator:
cgen = (cm(1.*i/NUM_COLORS) for i in range(NUM_COLORS))

撰写回答