2014-09-29 49 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