- 积分
 - 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, 下载次数: 77, 下载积分: 金钱 -5  
 
网格化数据 
 
 
- 
 
 
- 
getisccp.m
 
2.27 KB, 下载次数: 89, 下载积分: 金钱 -5  
 
ISCCP的HDF格式数据处理 
 
 
 
 
评分
- 
查看全部评分
 
 
 
 
 
 |