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

时间:2017-09-25 14:15:25

标签: matlab subset latitude-longitude mmap netcdf

我正在尝试使用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

当我尝试绘制数据时,我需要将其翻转以确保冰岛灰尘位于地理位置正确的位置(参见附件)。纬度是反向绘制的(需要从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'); 

我做错了什么?这是我开始和计数的顺序吗?或者,这是我绘制图像的方式吗?我也尝试使用pcolor(而不是m_pcolor),但是我收到一个错误,说明尺寸错误(但它们不是......)。我将此代码用于pcolorpcolor(long1_sub,lat,data1)并收到错误:

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

这些变量的维度为:

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

1 个答案:

答案 0 :(得分:0)

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

imagesc(long1_sub,flipup(lat),data1)

因为这个非常不直观的imagesc所以我建议使用pcolor。至于为什么在使用相同的变量时pcolor错误,pcolor文档说,"如果X和Y是向量,X对应于C的列,Y对应于行。"由于data1是104x54,你可能希望将它转换为54x104,以便它与lon / lat一致,

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

我希望这有帮助!