Python更改底图上的单位

时间:2017-06-05 20:29:23

标签: python matplotlib-basemap netcdf4

我正在尝试使用python 3.6在basemap上绘制netCDF4文件中的降水数据。我正在使用的代码在非常相似的数据集上完美地工作。唯一的区别是之前的降水数据是在#cm;'而我目前试图绘制的数据是' kg m-2 s-1'。在此文件中找到的变量是time,time_bnds,lat,lat_bnds,lon,lon_bnds和pr。 pr是降水变量,也是我对绘图感兴趣的变量。

这是我的代码

from mpl_toolkits.basemap import Basemap, cm
from netCDF4 import Dataset as NetCDFFile
import matplotlib.pyplot as plt

nc = NetCDFFile('filename.nc','r')

p = nc.variables['prc']
data = p[:,:,0]

fig = plt.figure(figsize=(8,8))
ax = fig.add_axes([0.1,0.1,0.8,0.8])

m = Basemap(projection='cyl',lon_0=180,lat_0=0,resolution='l')

m.drawcoastlines()
m.drawstates()
m.drawcountries()


ny = data.shape[0]; nx = data.shape[1]
lons, lats = m.makegrid(nx,ny) 
x,y = m(lons, lats) # compute map proj coordinates.

cs=plt.contourf(x,-y,data*2592000,range(0,1000,10),cmap=cm.s3pcpn,latlon=True)

#data is multiplied by the amount of seconds in a month

cbar = m.colorbar(cs,location='bottom',pad="5%")
cbar.set_label('mm')

plt.show() 

如果您想尝试使用我使用的相同文件运行此代码,则从CMIP5网站下载netCDF4文件:http://pcmdi9.llnl.gov/我的文件名:(/ data / CCSM4 / pr_Amon_CCSM4_historical_r1i1p1_185001-200512.nc ) 但原始数据为netCDF3_CLASSIC格式,因此您必须将其更改为netCDF4

1 个答案:

答案 0 :(得分:1)

如果唯一的变化是以降水量为单位,那么将数据转换为cm,那么你知道它会起作用,你已经熟悉了如何解释数据。你甚至可以写一个函数来转换它。

如果您将其转换,并且它的格式与您希望的格式相同,但它仍然无法正常工作,那么您会发现数据存在其他问题,因此&# 39;尝试这种方法的另一个好处。