我正在尝试为特定年份创建年度最大降雨量的地图。
我有十个NC文件,每个文件降雨量为3小时,包含5年的数据。对于我使用的降雨数据,它位于3D数组中:pr(time,lat,lon)
,尺寸为(14616, 145, 192)
我需要使用Matplotlib找到每年的最大降雨量,创建此数据的世界地图。考虑到每个NetCDF文件有5年,我不确定这样做的最佳方法,这意味着我需要在每个文件的14616个数据点中找到5个最大值,总共10个文件。
我的第一个想法是按年份的文件部分(从现在开始只有一个文件):
a = pr[0:2928]
b = pr[2929:5849]
c = pr[5850:8769]
d = pr[8770:11689]
e = pr[11690:14617]
然后使用np.max
计算每个值的最大值,并使用np.arry
创建包含这些值的新数组。问题是这导致一维数组,我遇到了问题,因为我的输入必须是一个二维数组。 (否则会导致错误:TypeError: Input z must be a 2D array.
)
我尝试使用np.reshape
重新整形数组(重新整形为(2L, 5L)
)并且我能够成功完成,但在尝试创建数字时会出现以下错误: TypeError: Length of x must be number of columns in z.
我相信这是因为我创建的新数组中没有包含lat和lon数据,但我对此并不完全确定。
我想知道是否有更好的方法来找到最大值然后将它分开,就像我考虑它的大量数据一样,并且我不确定更有效的方法。
如果没有,我想知道如何格式化我的新数组,以便它可以用来创建地图。下面我还有代码来创建导致TypeError: Length of x must be number of columns in z.
yrmax1
是形状为(2L, 5L)
的最大降雨量的新重组数组。
plt.figure(1,figsize=(10, 8))
map = Basemap(projection='cyl',\
llcrnrlat=LLlat,urcrnrlat=URlat,\
llcrnrlon=LLlon,urcrnrlon=URlon,\
rsphere=6371200.,resolution='i')
map.drawcoastlines(linewidth=0.5)
lons,lats = map(lon,lat)
cs = plt.contourf(lons,lats,yrmax1,np.linspace(-2,1,30),cmap=plt.cm.RdYlBu_r, extend='both')
plt.colorbar(cs,orientation='horizontal')
plt.xlabel('Longitude')
plt.ylabel('Latitude')
plt.show()
谢谢!