如何在 Matlab 中更正纬度和经度的 ncread 子集?

How do I correct ncread subset of latitude and longitude in Matlab?

我正在尝试使用 ncread 在 Matlab 中对 .nc 文件进行子集化。我希望对经度 -74.6875 到 -10.3125 (W) 和纬度 58.2500 到 84.7500 (N) 的数据进行子集化,以在格陵兰岛周围创建一个边界框。我想要每天数据的子集。我尝试了以下代码,它适用于我需要的经度和纬度索引,但生成了翻转(倒置)版本的格陵兰岛(见附件 1):

data = ncread('dust_ddep.nc','dust_ddep',[457 297 1], [104 54 Inf], [1 1 1]); %576x360x366 lon, lat, time

当我尝试绘制数据时,我需要翻转它以确保 Iceland dust 在地理上位于正确的位置(见附件)。纬度是反向绘制的(需要从 55 到 85 N,而不是相反)。

然后,我使用m_coast函数绘制出格陵兰岛的海岸线(见附件,2):

figure;
data1 = data(:,:,160); %Grab one day of data
imagesc(long1_sub,lat,data1)
% m_pcolor(lon,lat,data(:,:,1)); %This comes up blank when I try to run m_pcolor
shading flat; hold on;
gland = m_coast('patch',[1 1 1],'edgecolor','k')
% flipud(gland) %doesn't fix the upside down Greenland
m_grid('box','fancy'); 

我做错了什么?这是我开始和计数的顺序吗?或者,这是我绘制 imagesc 的方式吗?我也尝试使用 pcolor(而不是 m_pcolor),但我收到一条错误消息,指出尺寸错误(但它们不是 ...)。我将此代码与 pcolor 一起使用:pcolor(long1_sub,lat,data1) 并收到错误:

Error using pcolor (line 59)
Matrix dimensions must agree.

这些变量的维度是:

Long1_sub is [104x1]
lat is [54x1]
data1 is [104x54]

imagesc 的原点是左上角而不是左下角,因此 'flip' 您的 y 轴。所以你需要翻转 y 轴,使其像你通常期望的那样。

imagesc(long1_sub,flipup(lat),data1)

imagesc 非常不直观,因此我推荐使用 pcolor。至于为什么使用相同变量时 pcolor 会出错,pcolor 文档说,"If X and Y are vectors, X corresponds to the columns of C and Y corresponds to the rows." 由于 data1 是 104x54,因此您需要将其转置为 54x104,以便它与 lon/lat、

pcolor(long1_sub,lat,data1') % Notice the ' next to data1

希望对您有所帮助!