将高分辨率网格化数据重新分配到低分辨率的较粗糙分辨率数据?

时间:2016-05-14 06:35:47

标签: python matplotlib netcdf

我有一个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的链接

1 个答案:

答案 0 :(得分:1)

在您的代码段中,datagridview1.datasource = dt; xin = lons。来自basemap.interp文档,

  

xin,yin:rank-1数组,包含x和y的数据网格,按升序排列。

意味着yin = latsxin)和lonsyin)必须不断增加。从错误回溯看,自lats和/或xin[-1]-xin[0] < 0以来情况并非如此。

在不知道yin[-1]-yin[0] < 0lons到底是什么的情况下(因为您的代码不会与您链接到的数据一起运行),很难进一步详述。

编辑 - 使用底图进行绘图

我认为您遇到的主要问题是纬度和经度数据的形状。由于latslons基本上是相同数组的堆栈,因此我将它们转换为1d数组,如下所示。

lats

enter image description here