使用MATLAB处理清华MEIC清单数据时,如果对MATLAB的网格对应关系不熟悉,很容易造成错误,下面给出一些避坑指南:
MEIC数据格式
正常来讲,通过MEIC官网下载得到的MEIC清单数据,其nc文件中含有的变量为z,是1维的,官网Q&A上给出的1维数据与2维数据对应关系为:
网格重构中的问题
看到这个对应关系,没有系统学习过MATLAB的初学者可能会立马开始reshape和构建网格
%origin_file--需要读取的排放清单文件路径及名称
PM25=reshape(ncread(origin_file,'z'),320,200);
unvalid_pos=find(PM25<0);
PM25(unvalid_pos)=NaN;
lon=70.125:0.25:150;
lat=59.875:-0.25:10;
contourf(lat,lon,PM25);
grid on
然后就会喜提一张奇形怪状的图
问题出在reshape的语法和meic的网格对应关系不一致。通过上述reshape得到的其实是下面的网格结构:

解决方案
上述问题解决非常简单,不就是反过来了嘛,MATLAB提供了非常实用的功能——矩阵转置,所以只需要再加一行:
PM25=PM25';
上述问题就可以得到解决,附一张成品图和完整代码(使用了m_map工具包,相对好看一点,当然还有很多参数值得细致调整可以请各位自行探索):
%origin_file--需要读取的排放清单文件路径及名称
lon=70.125:0.25:150; lat=60-0.125:-0.25:10;
PM25=reshape(ncread(origin_file,'z'),320,200);
unvalid_pos=find(PM25<0);
PM25(unvalid_pos)=NaN;
m_proj('Mercator','lon',[70 140],'lat',[15 55]);
m_contourf(lon,lat,PM25',100,'Linestyle','none'); %设置等高线层级为100,等高线不显示
m_grid; %显示经纬网格
colorbar
clim([0 1000]) %设置颜色显示范围