colorbar中的奇怪范围值,matplotlib

时间:2010-10-19 15:37:04

标签: python matplotlib netcdf

我是python&的新用户matplotlib,这可能是一个简单的问题,但我在互联网上搜索了几个小时,无法找到解决方案。

我正在绘制以NetCDF格式呈现的降水数据。我觉得奇怪的是,数据中没有任何负值。(我检查了很多次,只是为了确保)。但是,colorbar中的值以负值开头(如-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. 每次运行代码时,颜色栏中的值是否正确,相同数据的cos,下次运行代码时,值如下所示“-0.00001893,2.00000000,4.0000000000,6.00000000等”
  4. 我想将它们自定义为“0.0,2.0,4.0,6.0等”
  5. 谢谢, Vaishu

1 个答案:

答案 0 :(得分: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参数来调整要显示的刻度以及如何显示它们。