matplotlib.contourf级别是否取决于色彩映射中的颜色数量?

时间:2014-08-06 17:45:23

标签: python matplotlib colorbrewer

我使用contourf绘制地图,我通常使用水平= 50的默认(彩虹)colorscheme。

#Various imports
#LOTS OF OTHER CODE BEFORE
plot = plt.contourf(to_plot, 50)
plt.show()
#LOTS OF OTHER CODE AFTER

输出如下。我做其他各种事情来获得海岸线等。如果有人感兴趣,我会使用虹膜和手抄本完成。

This is the result

现在我已经决定不想使用彩虹计划,所以我使用了一些Cyntia Brewer颜色:

brewer_cmap = mpl.cm.get_cmap('brewer_Reds_09')
plot = iplt.contourf(to_plot, 50, cmap=brewer_cmap) # expect 50 levels

然而输出是: This is the result

您可以看到Here此调色板只有9种颜色。所以我的问题是,色彩图级别是否受色彩图中可用颜色数量的限制?我非常喜欢这张地图,我想知道它是否有可能生成一个像它这样的新地图但是有更多的红色等级?

我对能够捕捉数据的可变性感兴趣,所以更多的轮廓水平似乎是一个好主意,但我热衷于失去彩虹方案,只是选择一种基于单一颜色的方案

干杯!

1 个答案:

答案 0 :(得分:3)

是的,它是一个离散的色彩映射,如果你想要一个连续的色彩映射,你需要制作一个自定义的色彩映射。

#the colormap data can be found here: https://github.com/SciTools/iris/blob/master/lib/iris/etc/palette/sequential/Reds_09.txt

In [22]:

%%file temp.txt
1.000000 0.960784 0.941176
0.996078 0.878431 0.823529
0.988235 0.733333 0.631373
0.988235 0.572549 0.447059
0.984314 0.415686 0.290196
0.937255 0.231373 0.172549
0.796078 0.094118 0.113725
0.647059 0.058824 0.082353
0.403922 0.000000 0.050980
Overwriting temp.txt
In [23]:

c_array = np.genfromtxt('temp.txt')
from matplotlib.colors import LinearSegmentedColormap
plt.register_cmap(name='Test', data={key: tuple(zip(np.linspace(0,1,c_array.shape[0]), c_array[:,i], c_array[:,i])) 
                                         for key, i in zip(['red','green','blue'], (0,1,2))})
In [24]:

plt.contourf(X, Y, Z, 50, cmap=plt.get_cmap('Test'))
plt.colorbar()
Out[24]:
<matplotlib.colorbar.Colorbar instance at 0x108948320>

enter image description here