文档介绍:IDL、NCL、GRADS、MATLAB绘图命令对应关系一览表
?
grads只支持按照一定顺序存储的二进制数据文件,,然后每个变量按照向量形式存储,每个变量由外向内的存储顺序是高度(或等压面)==》纬度==》,否则画图容易出现一堆一堆的乱线条,这就说明你的数据没有按照grads的要求存储.
再看看ncl,可以说ncl支持绝大多数各种数据的读写,cdf,hdf,以及二进制数据甚至ASCII码(如果说是十进制数据或许你会更熟悉),前两种数据一般都有头文件,不能用C语言或者Fortran读取,都需要插件才可以读取,ncl可以直接读取,CDF格式(.nc),这种数据必须又正确的时间说明,也就是说时间必须是真实的,有些模式模拟出来的数据grads的sdfopen命令是打不开的,因为一般模式都是nonleap run,都是平年,没有设定闰年,造成了时间说明不真实,'如何使用NC数据呢?所以建议使用ncl转换数据,将NC数据,hdf数据或者十进制数据转换成grd数据,供grads使用.
这样说明是在是太空洞了,那么下面我举个例子吧.
eg1) cdf数据转换成grd数据
'reinit'
='air';='hgt';='uwnd'
='vwnd';='omega';='shum'
j=6
while (j<=6)
'set fwrite/disk3/users/Rao_Jian/ERA-Interim-daily/entropy/''.-'
'set gxout fwrite'
i=1979
while (i<=2010)
'sdfopen/disk3/users/lbq/ERA-Interim-daily/pressure/''.interim.'i'.nc'
tt=1
if(i=1980|i=1984|i=1988|i=1992|i=1996|i=2000|i=2004|i=2008)
while (tt<=366)
'set t 'tt
zz=1
while (zz<=37)
'set x 1 240'
'set y 1 121'
'set z 'zz
'd '''
zz=zz+1
endwhile
tt=tt+1
endwhile
else
while (tt<=365)
'set t 'tt
zz=1
zz=1
while (zz<=37)
'set x 1 240'
'
set y 1 121'
'set z 'zz
'd '''
zz=zz+1
endwhile
tt=tt+1
endwhile
endif
i=i+1
name='/disk3/users/lbq/ERA-Interim-daily/pressure/''.interim.'i'.nc'
'close 1'
endwhile
'disable fwrite'
j=j+1
endwhile
eg2)使用ncl将数据输出成二进制数据,grads可以使用(截取部分)
patho          = "/disk3/users/Rao_Jian/Hadley/"
system("rm "+patho+"")
system("rm "+patho+"")
system("rm "+patho+"")
system("rm"+patho+"")
do nt=0,719
fbindirwrite(patho+"",ev_ts(:,nt));写成二进制数据,供grads使用
end do
fbindirwrite(patho+"",ev_ts(time|:,evn|:))
asciiwrite(patho+"",ev_ts(time|:,evn|:));写成十进制数据,可以贴到EXCEL中使用
asciiwrite(patho+"",ev_ts)
;print(ev_ts(0,:))
此外ncl中还有其他的读写函数,如
fbinrecread,fbinrecwrite,fbinwrite,fbinread
ncl
cdf3/4、h