登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 ouc129 于 2015-4-18 14:41 编辑
Grads同时打开不同时间维度数据和不同分辨率数据画图的一种处理方法 由于之前一直都是用的同一套资料,没使用过不同资料组合分析画图的情况,最近有人遇到问题,所以想分享一下自己的一点点拙见。如果各位网友有更好的办法亦或我的方法有漏洞或者可以改进的地方,请坚决指出,谢谢。
1)先解决多个数据,时间序列长度不一的情况:
Grads在打开一个NC或者DAT文件时,不需要考虑数据时间序列长度的问题。但是如果同时打开多个数据文件,想要将不同的变量叠加绘出在同一张图上边,这个时候就要尤其注意了。这里以同时打开两个.NC格式数据为例(两个以上以及dat数据同理),如果两个NC数据同属一套资料集,比如都是ncep2.5经度的资料,一个温度,一个位势高度,那么脚本自然很简单,只需要打开后,绘图时以air.1 和hgt.2区分就可,这里注意,两个NC数据一般要求具有相同的时间起始时刻,否则在普通的命令脚本里可能会出现错误。当然,还有一种解决办法:“set dfile ##”,即打开第一个数据时,set dfile 1 绘制完毕第一个数据后,再打开第二个数据,set dfile 2,再绘制第二个数据,这样两个数据的属性就不会在grads里冲突,因此就可以打开不同时间起止的数据了。
给个示例,我们使用ncep2.5的数据,一个为位势高度数据,高度层包含400hPa,500hPa,600hPa三层,时间跨度为2015.1.5-1.20。变量名为hgt,文件名为hgt.2015.1.5_1.20.nc; 另外一个数据为近地表温度(sig995),高度层仅为一层,即sig995(近地表),时间跨度为2015.1.1-1.31。变量名为air,文件名为air.995.2015.1.1_1.31.nc
如果我们采用 以下的方式打开,
'sdfopen E:\test\air.995.2015.1.1_1.31.nc'
'sdfopen E:\test\hgt.2015.1.5_1.20.nc'
然后用 'd air.1-273.13'和 'd hgt.2'的方式去绘图,那么只能绘制出温度的二维分布场,位势高度的等值线绘制不出来。并且grads会报错,大体意思就是数据的坐标纬度信息不一致,如下图:
那么,这个时候我们就要采用'set defile **'这个命令来巧妙的将一个gs脚本中的两个数据屏蔽开来,以免两个数据的描述信息起冲突。
即:
'sdfopen E:\test\air.995.2015.1.1_1.31.nc'
'set dfile 1'
... ...
此处省略若干行
'sdfopen E:\test\hgt.2015.1.5_1.20.nc'
'set dfile 2'
... ...
此处省略若干行
这样就可以分别在两个相互独立的板块中定义不同的时间和高度层。
当然前后可以嵌套循环,以达到将多个时间时刻的图绘制在同一个gmf文件或者输出多个png格式的图。
绘制的图如下:
温度和高度场就可以同时出现在一张图上,并且注意到温度和位势高度数据的起始和结束时刻以及高度层数也是不一致的。
我们在脚本中分别对时刻和高度场进行了定义,由于set defile 命令的存在,使得两个数据间的信息被成功的隔离。
当然,对于两个以上的数据,原理相同,大家有兴趣或者有需要的就可以试一下。dat文件由于还有ctl描述文件,如果打开不同时间维度绘图,其原理应该和上述方法相同,我没有试验,有需要的童鞋也可以试一下。
附件附了对应的gs文件和两个nc数据,以及绘制出的gmf图文件,欢迎补充指正,谢谢。
hgt_air.gs
(1.58 KB, 下载次数: 137)
|