GrADS绘图学习技巧与实例(阿木)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
以下技巧总结都是笔者从学习实践过程中总结出来的,基本的问题。不求全面,希望对读者学习有用,如果有问题,敬请留言指正,以促进交流学习!(笔者:阿木)
1、软件综述:grads软件是一款绘图软件除了绘制图形,还可以提取数据,主
要应用是在大气科学中,当然只要是数据处理成grads能够读取的数据文件就可以进行相关绘图。软件版本问题,软件本身不是很大,我接触到1.8、1.9、
2.0版本的,1.8版本的安装很多情况还要修改环境变量、1.9版本的不识别
‘sdfopen’命令,最稳定的版本是2.0版本,所以笔者推荐学习者安装2.0版本,选择默认安装路径就可以。
2、文件类型简述:grads处理的是网格数据,可以处理的数据类型有:grd、
grib、nc(海洋常用的数据),cdf(雷达卫星数据),其中nc、cdf数据都是自带描述文件,不需要ctl,grib数据要通过命令生成ctl、index数据才可以调用,常用的是grd数据,需要ctl。
3、数据文件转换:grads软件识别的数据是二进制无格式数据,文件类型是
‘binary’,写入和生成时是不需要格式的如read(20) sst(i,j,iz,it),20为文件号,通常是十进制数据与grd数据间转换,这里给一个grd转换成txt数据的fortran程序:
parameter(nx=56,ny=41,nz=1,nt=360)
dimension sst(nx,ny,nz,nt)
real sst
open(15,file='sst.grd',form='binary') !固定的用form=‘binary’就是二进制数据open(16,file='sst.txt') !新建txt文件
do it=1,nt
do iz=1,nz
read(15) ((sst(i,j,iz,it),i=1,nx),j=1,ny) !read后只有文件号,数据是无格式的
enddo
enddo
do it=1,nt
do iz=1,nz
write(16,*) ((sst(i,j,iz,it),i=1,nx),j=1,ny) !输出时是txt文件可直接看的数据,有格式输出,有*
enddo
enddo
close(15)
close(16)
end
写程序时:注意格点数要与数据对应,如:上程序对应的数据是经度90~200,纬度-20~60,时间:1971.01~2000.12共360个月的海面温度数据,数据格点精度2*2 ,nx=(200-90)/2+1,ny=(60-(-20))/2+1,nt=360,nz=1,大气的数据要根据数据的层次确定几层。
4、grd 、ctl、、gs、nc详述
grd文件:grd数据不可直接看,为二进制无格式数据,简单的说只有1和0,而且数据间没有间隔,grads识别grd是根据ctl进行划分的,根据ctl中的经度、纬度、层次、时间,精度进行数据分块。ctl实例:
dset C:\data\sst.grd
undef -9.99E+33
title sea surface tempture
xdef 56 linear 90 2
ydef 41 linear -20 2
tdef 360 linear jan1971 1mo
zdef 1 levels 0
vars 1
sst 0 99 surface sea tempture
endvars
上例数据的数据顺序是(以下是数据对应的经纬度)
纬度经度(t=1)
-20 90~200的纬度20S的从90E~200的56个数据
-18 90~200的纬度18S的从90E~200的56个数据
.
.
.
6090~200的纬度60N的从90E~200的56个数据
以上为一层的数据,接下来是t=2,t=3……t=360的数据,每个时间点的每一层是如上格式,
编程时读取和写如的数据循环顺序依次是:时间、层次、纬度、经度,读者参照3中的fortran程序加以理解。
ctl文件:具体其他指导书上都有,我这里强调的是sst 后面的0表示一层,如果是两层以上则是2,3……,1层是固定用法,sst后面的99是默认设置;undef -9.99E+33 此处的数值决定了软件将文件中的那些值认定为不绘制的数据,所以这个值一定要与数据对应。
gs 文件,批命令文件,与ctl一样是用记事本编写,另存为.gs文件,文件都是
命令,方便大段的命令编写、修改,很常用,尤其时绘制的图要求比较多时必须用,免得在命令窗口重复输入命令浪费时间,如下例子:
'reinit'
'open c:\data\uv.ctl'
'set t 7'
'set lev 850'
'set grid off'
'set vpage 0 8.5 0 3.6'
'set parea 0.3 8.5 0.3 3.5'
'set gxout vector'
'set grads off'
'd u;v'
'set vpage 0 8.5 3.6 7.2'
'set grads off'
'set gxout barb'
'd u;v'
'set vpage 0 8.5 7.2 11'
'set grads off'
'set gxout grid'
'd u;v'
'printim c:\images\gxout3uv850.png white'
;
Gs文件以‘;’结尾,分号后面不能有空格,除了循环命令外都需要单引号将命令引起来。
nc文件:此类数据不需要ctl可直接用sdfopen命令直接打开,往往需要知道数据文件中的各个纬度特征,可以用:q ctlinfo命令查询该文件的内置ctl,这样一切都会很清楚,尤其是数据精度:截图如下(下例即2*2的网格经度):