- 积分
- 3799
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2015-7-6
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 Lighting 于 2016-12-9 10:21 编辑
看到论坛有不少关于ISCCP数据处理及绘图的问题,而且一直没人解决。现提供一种方法,以解决绘制填充等值线图的问题。
之前也短暂的接触过ISCCP数据的处理以及绘图,因为ISCCP数据网格并不是均匀的,用MATLAB进行画图需要对数据进行网格化,而NCL刚好有这部分的介绍,当时就是用NCL进行绘图。但最近心血来潮,便试着用MATLAB进行绘制,再开始上程序之前,先说一下ISCCP投影网格的问题。当然,如果你对这个不感兴趣,可直接跳过。
================= 投影网格介绍=====================
读取数据之后,通过对纬度数据的观察可以看出,纬度格距是均匀变化的,格距为2.5度,反观经度的格距变化是不均匀的。
图中上下两行分别为纬度和经度坐标,每个坐标对构成一个网格,坐标对为网格中心的经纬度坐标。对纬度数据进行观察可以发现,纬度变化是有规律的,从小到大,纬度为固定值的个数是变化的,但是这个纬度为固定值时有多少个纬度点是可以统计出来的。比如纬度等于1.25时,共有三个,也就是说纬度等于1.25的线上有三个网格,用360/网格数。网格中心坐标分别为上图所示。纬度等于3.75时共有7个网格点。因为每条线上网格的大小都是一样的,所以可以通过求出每条线上的网格数,得到经度的中心点坐标。
纬度共分为72个网格,经度方向网格大小不一样,但最小经度间隔大小为2.5度,所以分为144个网格。
得到经度的中心点坐标后,就可以把处理后得到的要绘图的一维变量插值到网格中,然后即可绘图。
================ 以下为示例 =======================
- fip = 'E:\MATLAB\data\isccp\';
- vartime = 9;
- varsort = 8;
- data = getisccp(fip, vartime, varsort);
- [var, LON, LAT] = isccpgrid(data,);
- m_proj('Equidistant cylindrical','lon',[-180, 180],'lat',[-90, 90]);
- m_contourf(LON-180,LAT-90,var,'linestyle','none');
- m_coast('linewidth',1,'color','k');
- m_grid('linestyle','none','linewidth',1)
复制代码 执行上述命令后可得到以下效果图,可以看到拐角处出现空白区域。这个是由于越到两极网格数越少网格越大导致。
- [var, LON, LAT] = isccpgrid(data, true);
- m_proj('Equidistant cylindrical','lon',[-180, 180],'lat',[-90, 90]);
- m_contourf(LON-180,LAT-90,var,'linestyle','none');
- m_coast('linewidth',1,'color','k');
- m_grid('linestyle','none','linewidth',1)
复制代码 执行上述命令后,空白区域便被填充了,而且不会出现问题。
是否填充空白区域你可以通过可选逻辑参数控制,一般情况下,只有用到全球分布图时才考虑是否填充,绘制中纬度区域分布图时,可忽略这个参数,因为中纬度区域网格数多,单个网格面积小,基本上都覆盖了。
|
-
-
isccpgrid.m
1.59 KB, 下载次数: 74, 下载积分: 金钱 -5
网格化数据
-
-
getisccp.m
2.27 KB, 下载次数: 85, 下载积分: 金钱 -5
ISCCP的HDF格式数据处理
评分
-
查看全部评分
|