我有一个netcdf文件,其中包含高分辨率的数据(.1 x .1度),并使用matplotlib在底图上绘图。我想要做的情节是轮廓线。出于特定原因,我想以1 x 1度的分辨率绘制数据。我在这里使用了以下代码示例示例Regridding regular netcdf data。
请参阅更新1以获取实际数据的链接。
为了清楚起见,下面是我试图执行以重新降低分辨率的代码: -
from mpl_toolkits import basemap
from netCDF4 import Dataset
filename = 'path/to/netcdf/file.nc'
with Dataset(filename, mode='r') as fh:
lons = fh.variables['LON'][:]
lats = fh.variables['LAT'][:]
data = fh.variables['Data'][:].squeeze()
lons_sub, lats_sub = np.meshgrid(lons[::4], lats[::4], sparse=True)
data_coarse = basemap.interp(data, lons, lats, lons_sub, lats_sub, order=1)
代码似乎是正确的。但是当我执行代码时,我在行data_coarse = basemap.interp(data, lons, lats, lons_sub, lats_sub, order=3)
中得到以下错误: -
/__init__.py", line 4897, in interp
if xin[-1]-xin[0] < 0 or yin[-1]-yin[0] < 0:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我还没有明白问题出在哪里以及如何解决这个问题?
感谢任何帮助。
更新1
链接到实际数据https://www.dropbox.com/s/ddlpbw5vvj5kz5w/mslp.txt?dl=0
链接到lats https://www.dropbox.com/s/lpwjavxtwtt3r13/xlat.txt?dl=0
和lons https://www.dropbox.com/s/1a0q49drfcd2o9h/xlon.txt?dl=0的链接
答案 0 :(得分:1)
在您的代码段中,datagridview1.datasource = dt;
和xin = lons
。来自basemap.interp
文档,
xin,yin:rank-1数组,包含x和y的数据网格,按升序排列。
意味着yin = lats
(xin
)和lons
(yin
)必须不断增加。从错误回溯看,自lats
和/或xin[-1]-xin[0] < 0
以来情况并非如此。
在不知道yin[-1]-yin[0] < 0
或lons
到底是什么的情况下(因为您的代码不会与您链接到的数据一起运行),很难进一步详述。
我认为您遇到的主要问题是纬度和经度数据的形状。由于lats
和lons
基本上是相同数组的堆栈,因此我将它们转换为1d数组,如下所示。
lats