2015-08-28 28 views
1

可見部分我有底圖的等高線圖,我希望讓他們適合可見數據來調整顏色條的範圍。默認設置會使顏色範圍適合所有數據,即不適合繪製的數據。有這樣的設置嗎?調整彩條範圍的底圖等高線圖

import numpy as np 
import matplotlib 
import matplotlib.pyplot as plt 
from mpl_toolkits.basemap import Basemap, addcyclic, shiftgrid 

myllcrnrlat=35 
myurcrnrlat=65 
myllcrnrlon=-45 
myurcrnrlon=45 
m = Basemap(projection='cyl', llcrnrlat=myllcrnrlat, urcrnrlat=myurcrnrlat,\ 
llcrnrlon=myllcrnrlon, urcrnrlon=myurcrnrlon, resolution='c') 

lonsin=np.asarray(range(0,360,10)) 
latsin=np.asarray(range(-90,90,10)) 
valin=np.random.rand(len(latsin), len(lonsin)) 
valin[0,0]=5 #this is a value outside my basemap area and higher than all inside. 
valin_cyclic, lons_cyclic = addcyclic(valin, lonsin) 
valin_cyclic, lons_cyclic = shiftgrid(180., valin_cyclic, lons_cyclic, start=False) 
lon2d, lat2d = np.meshgrid(lons_cyclic, latsin) 
x, y = m(lon2d, lat2d) 

cs = m.pcolormesh(x, y, valin_cyclic,cmap=plt.get_cmap('autumn_r')) 
cbar = plt.colorbar(cs) 
plt.show() 

職高我可以做一些像下面使用VMIN,VMAX,但似乎比較長,所以也許有一個特殊的設置?

lonsin_inbasemap=np.asarray([a for a in lonsin if myllcrnrlon <= a if a <= myurcrnrlon]) 
latsin_inbasemap=np.asarray([a for a in latsin if myllcrnrlat <= a if a <= myurcrnrlat]) 
valin_inbasemap_tmp = np.transpose(np.asarray([valin[:,a] for a in range(len(lonsin)) if lonsin[a] in lonsin_inbasemap])) 
valin_inbasemap  = np.asarray([valin_inbasemap_tmp[a,:] for a in range(len(latsin)) if latsin[a] in latsin_inbasemap]) 
del(valin_inbasemap_tmp) 

vmax=np.amax(valin_inbasemap) 
cs = m.pcolormesh(x, y, valin_cyclic,vmax=vmax, cmap=plt.get_cmap('autumn_r')) 
cbar = plt.colorbar(cs) 
plt.show() 

回答

0

如果你想掩蓋一些低於某個值的數據。
例如,負的數據,你會不會想顯示: 您可以使用``

valin = np.ma.masked_less(valin_cyclic,0) 
cmap1 = plt.cm,get_cmap("autumn_r") 
cmap1.set_bad("w") 

p =plt.pcolor((x, y,conc,cmap=cmap1,alpha =1,zorder =2)