2010-10-19 109 views
4

我是一个新的用户python & matplotlib,这可能是一个简单的问题,但我搜索了几个小时的互联网,并找不到解决方案。奇怪的色彩值范围,matplotlib

我正在绘制NetCDF格式的降水数据。我发现奇怪的是,数据没有任何负面的价值(我多次查过,只是为了确定)。但是,颜色条中的值以负值开始(如-0.0000312等)。它没有任何意义,因为我不对数据做任何操作,其他只从大文件中选择一部分数据并绘制它。

所以我的代码并没有太多。下面是代码:

from mpl_toolkits.basemap import Basemap 
import numpy as np 
import matplotlib.pyplot as plt 
from netCDF4 import Dataset 
cd progs 
f=Dataset('V21_GPCP.1979-2009.nc') 
lats=f.variables['lat'][:] 
lons=f.variables['lon'][:] 
prec=f.variables['PREC'][:] 
la=lats[31:52] 
lo=lons[18:83] 
pre=prec[0,31:52,18:83] 
m = Basemap(width=06.e6,height=05.e6,projection='gnom',lat_0=15.,lon_0=80.) 
x, y = m(*np.meshgrid(lo,la)) 
m.drawcoastlines() 
m.drawmapboundary(fill_color='lightblue') 
m.drawparallels(np.arange(-90.,120.,5.),labels=[1,0,0,0]) 
m.drawmeridians(np.arange(0.,420.,5.),labels=[0,0,0,1]) 
cs=m.contourf(x,y,pre,50,cmap=plt.cm.jet) 
plt.colorbar() 

,我得到了这些代码是一个美丽的情节,从价值-0.00001893启动彩条的输出,剩下的都是正面的价值观,我相信是正确的。它只是最小的价值,这让我烦恼。

我想知道:

  1. 这有什么错在我的代码?因为我知道数据是正确的。
  2. 有没有办法手动将值更改为0?
  3. 颜色栏中的值每次运行代码时都会改变,相同数据的余弦值,下一次运行代码时的值是否为“-0.00001893,200000000,400000000,6.00000000等等”
  4. 我想自定义它们为 “0.0,2.0,4.0,6.0等”

感谢, Vaishu

+0

你真的确定,那个价值是不正确的?也许印刷展示了一个圆整的价值。尝试打印pre.min() – tillsten 2010-10-22 18:26:06

回答

2

是的,你可以手动设置格式有关的一切彩条。看到这一点:

import matplotlib.colors as mc 
import matplotlib.pyplot as plt 
plt.imshow(X, norm=mc.Normalize(vmin=0)) 
plt.colorbar(ticks=[0,2,4,6], format='%0.2f') 
  1. 许多绘图功能,包括imshowcontourf,以及其他包括norm的论点,即需要一个Normalize对象。您可以设置该对象的vminvmax属性来调整相应的颜色条值。

  2. colorbar需要ticksformat参数来调整要显示的刻度以及如何显示它们。

+0

轮廓还将所需等高线的值作为参数,因此他还可以执行cs = m.contourf(x,y,pre,np.arange(0,pre.max())。 2),cmap = plt.cm.jet) – tillsten 2010-10-22 18:34:24

+0

好点,但我不确定它是否可以解决彩条的问题。 – 2010-10-22 20:48:39

+0

+1 for mc.Normalize - 否则子图中的图像*每个*缩放为0 .. 1.(-10表示imshow文档:“MxN浮点数组*可以被标准化”和norm =无) – denis 2010-11-03 18:43:31