Python 更改底图上的单位
Python changing units on a basemap
我正在尝试使用 python 3.6 在底图上绘制来自 netCDF4 文件的降水数据。我使用的代码在非常相似的数据集上运行良好。唯一的区别是之前的降水数据在 'cm' 中,而我当前尝试绘制的数据在 'kg m-2 s-1' 中。在此文件中找到的变量是时间、time_bnds、纬度、lat_bnds、经度、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.
如果唯一的变化是降水量的单位,将数据转换为厘米怎么样,这样你就知道它会起作用并且你已经熟悉如何解释数据。您甚至可以编写一个函数来转换它。
如果您转换它,并且它的格式与您期望的相同,但它仍然不起作用,您会发现您的数据还有其他问题,所以尝试这样做还有另一个好处方法。
我正在尝试使用 python 3.6 在底图上绘制来自 netCDF4 文件的降水数据。我使用的代码在非常相似的数据集上运行良好。唯一的区别是之前的降水数据在 'cm' 中,而我当前尝试绘制的数据在 'kg m-2 s-1' 中。在此文件中找到的变量是时间、time_bnds、纬度、lat_bnds、经度、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.
如果唯一的变化是降水量的单位,将数据转换为厘米怎么样,这样你就知道它会起作用并且你已经熟悉如何解释数据。您甚至可以编写一个函数来转换它。
如果您转换它,并且它的格式与您期望的相同,但它仍然不起作用,您会发现您的数据还有其他问题,所以尝试这样做还有另一个好处方法。