【发布时间】:2016-09-10 10:42:36
【问题描述】:
我有一个带有高分辨率网格数据 (.1 x .1 度) 的 netcdf 文件,并使用 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
【问题讨论】:
-
我不是
netcdf专家,但我不明白您提供的代码如何与您上传的纯文本文件一起运行。 -
你可以用这个
data = np.loadtxt('mslp.txt',delimiter=',')将数据读取为numpy数组。 -
当然可以,但是
data的形状是(189, 309),我不清楚lons和lats应该是什么。
标签: python matplotlib netcdf