2014-09-29 29 views
0

我有下图所示的图。目前,该图的色彩方案使用色彩图的全部范围(mpl.cm.Paired)。我想要做的,并且一直无法弄清楚,是如何限制matplotlib只使用colormap的一个子集。在这种情况下,我试图让起始颜色变成深蓝色。这里是我的代码的绘图部分:选择matplotlib颜色表中的起始颜色

Figure = plt.figure(figsize=(22,10)) 
Map = Basemap(projection='robin', lon_0=0, resolution='l') 
x, y = Map(LONS, LATS) 
levels = np.arange(0, 4100, 100) 
fcp = Map.contourf(x, y, data, levels, interpolation="bicubic", cmap=mpl.cm.Paired) 

cb = Map.colorbar(fcp, "bottom", size="5%", pad='5%', extendrect=False) 
cb.ax.tick_params(labelsize=18) 
cb.solids.set_edgecolor("face") 
cb.set_label("metres",fontsize=18) 
cb.ax.set_aspect(0.047) 

Map.drawcoastlines(linewidth=1) 
Map.drawmapboundary(linewidth=1) 
Map.drawmeridians([-150,-100,-50,0,50,100, 150],labels=[1,1,1,0],fontsize=18) 
Map.drawparallels([-60,-30,0,30,60],labels=[1,1,1,1],fontsize=18) 

enter image description here

+0

这可能比较容易只是创建基于此现有一个新的'colormap'。 – 2014-09-29 14:55:08

+0

为什么不使用例如'Blues'色彩映射? “配对”在这里确实不合适。 – mwaskom 2014-09-29 18:15:02

+0

@mwaskom虽然色彩地图的选择始终是科学家们热烈讨论的话题,但我的问题并不一定与这个数字有关。 – deepak 2014-09-30 01:20:01

回答

7

一种方式做,这将是调用函数mpl.cm.Paired()的标准化范围的子集(即,[0-1]),然后使用的颜色列表,它返回来定义新的颜色表:

import matplotlib.colors as mcol 

lvTmp = np.linspace(0.1,1.0,len(levels)-1) 
cmTmp = mlp.cm.Paired(lvTmp) 
newCmap = mcol.ListedColormap(cmTmp) 

你需要摆弄有关在该linspace0.1值来获得您从内置的颜色表要开始的颜色。

enter image description here

+0

非常好!谢谢你完美的作品。无法想象它会那么简单! – deepak 2014-09-30 01:25:40

+0

一旦你了解了色彩映射和规范化器,你可以对它们做很多事情。与往常一样,困难的部分正在适当地使用颜色。 – Deditos 2014-09-30 08:02:15