IDL等绘图命令对应关系一览表汇编Word格式.docx
《IDL等绘图命令对应关系一览表汇编Word格式.docx》由会员分享,可在线阅读,更多相关《IDL等绘图命令对应关系一览表汇编Word格式.docx(11页珍藏版)》请在冰豆网上搜索。
while(tt<
=366)
sett'
tt
zz=1
while(zz<
=37)
setx1240'
sety1121'
setz'
zz
d'
zz=zz+1
endwhile
tt=tt+1
else
=365)
endif
i=i+1
name='
/disk3/users/lbq/ERA-Interim-daily/pressure/'
close1'
disablefwrite'
j=j+1
eg2)使用ncl将数据输出成二进制数据,grads可以使用(截取部分)
patho
="
/disk3/users/Rao_Jian/Hadley/"
system("
rm"
+patho+"
ev_ts.grd"
)
ev_ts2.grd"
ev_ts.txt"
rm"
ev_ts2.txt"
dont=0,719
fbindirwrite(patho+"
ev_ts(:
nt));
写成二进制数据,供grads使用
enddo
ev_ts(time|:
evn|:
))
asciiwrite(patho+"
));
写成十进制数据,可以贴到EXCEL中使用
ev_ts)
print(ev_ts(0,:
此外ncl中还有其他的读写函数,如
fbinrecread,fbinrecwrite,fbinwrite,fbinread
ncl读取netcdf3/4、hdf4、grib-1/2也是通过文件操作的
eg3)ncl支持直接读取格式文件的读法
fi
=addfile(pathi+"
HadISST_sst.nc"
"
r"
sst0
=fi->
sst(960:
1679,:
:
)
load50yeardataduringfrom1950to2009
注意:
这类文件的后缀名一般为.nc/.hdf/.grb/.hdfeos/.ccm
2.grads中的描述文件与ncl中的什么对应
描述文件(.ctl)是一个纯文本文件,我们有数据grads还是不能出图,需要一个描述文件来指定他的存储数据个数,维度(时间长度、层数和经纬度信息)。
ncl是没有这种文件的,那么ncl在绘图时是通过什么信息来获得维度信息的呢?
其实,在ncl里又一个概念叫做coordinate,其实就是维度信息。
在ctl中,是通过xdef、ydef、zdef、tdef来声明数据的经纬度信息的。
也就是说,在一个ctl文件中声明的所有数据,其相同维度的信息必须相同(维数可以不同)。
那么我们还是举个例子好了
eg4.1)ctl描述文件
dset
/disk3/users/Rao_Jian/ERA-DATA/entropy/Var3D.grd
undef-999
titlemonthlyzonallymeanuwnd,vwnd,temperatureinTHETA-PVLATcoordinate
optionsyrev
xdef
1
linear0.0002.500
ydef
200linear0.0000.75
zdef
16
levels270280290300315330350370400450500550600650700750
tdef
389linearjan19791mo
vars3
ulat216-99meanszonalmeanuwindintheta-pvcoordinate
vlat216-99meanszonalmeanvwindintheta-pvcoordinate
tlat216-99meanszonalmeantemperatureintheta-pvcoordinate
endvars
上面的例子中,声明了三个变量,每个变量都是16层,说明都是空间三维的(可以不是的,此时16改为0),黄色的信息是维度信息,也就是说这三个变量ulat2、vlat2、tlat2相同的经度、维度、层数、时间。
你要说了,我的数据哪那么巧都是一样的维度,要是不一样怎么办?
对不起,必须是相同维度的信息完全一样的数据才可以放到一个描述文件中,否则要分开在不同的文件中描述,这也就是为什么在一些使用者的批处理脚本中(.gs)中会打开多个文件的原因之一,因为变量的信息可能不同。
eg4.2)ncl中维度声明形式举例
下面再来看看ncl中是如何声明维度信息的?
dudP0!
0="
time"
1="
lat"
2="
lon"
3="
level"
dudP0&
time=u&
time
level=u&
levelist
lat=u&
latitude
lon=u&
longitude
copy_VarCoords(dudP0,dvdP0)
copy_VarCoords(dudP0,dPTdP0)
在上面的例子中,!
是用来给坐标维度命名的,&
是用来引用某一维度数值的,copy_VarCoords是ncl的贡献函数库中的子程序,将一个变量的坐标信息原封不动的传给另一个变量。
必须注意的是,绘制地图底图时,还要涉及到属性的概念,用@来引用或者声明。
所以在给变量声明经纬度之名时,还要声明经纬度之属性,保证ncl能找到地图坐标,保证等值线或矢量与地图坐标对应,不发生错位。
eg4.3)ncl中声明坐标经纬度属性
pvlvl&
lev
=lvl
isentropiclevels
lat
=u&
lon
lat@units
degrees_north"
lon@units
degrees_east"
lev@units
="
K"
time@units="
monthssince1900-01-01"
pvlvl&
@是接在pvlvl&
lat后面的,也就是说,degrees_north属性是变量pvlvl的坐标lat的属性
3.grads中的批处理命令文件与ncl中的什么对应
这个不需要解释了吧,gs文件自然就相当与ncl脚本文件了,好好理解一下吧。
说的更具体一点,是相当于ncl中graphics部分,因为ncl不仅具有绘图功能,还具有强大的计算功能,尤其是巨大的函数库。
ncl的缺点是循环比较慢,优点就是有许多优化函数,不需要使用者自己编写子程序(如果你愿意,也可以自己编写,将脚本存在够得着的地方,用的时候load)。
4.grads中的图形类型设置与ncl的图形接口csm函数对应
说明
grads图形类型设置'
setgxoutgrahics-style
ncl图形类型设置gsn_csm_choice[_choise[_choice[……]]]
一般等值线图
setgxoutcontour
gsn_csm_contour(无地图底图)gsn_csm_map_ce,之前都要设置cnLinesOn=True
等值线+robinson投影
(cylindricalequidistantmap)
setmprojrobinson
gsn_csm_contour_map_ce
等值线+极射赤面投影
(PolarStereographicProjections)
setmprojnps/sps
gsn_csm_contour_map_polar(之前设置:
gsnPolar
NH"
/gsnPolar
SH"
填色等值线图
setgxoutshaded
gsn_csm_contour,之前设置
gsn_define_colormap(wks,colors),cnFillOn=True
填色等值线+等值线
setgxoutshaded
d..
顺序不能反
同上,之前设置cnFillOn=True,cnLinesOn=True
仅仅标记网格点
setgxoutgrid
比较灵活,可以使用gsn_add_test做到,没有对应的csm接口,参照http:
//www.ncl.ucar.edu/Applications/Scripts/station_3.ncl
矢量图
setgxoutvector
gsn_vector
流线图
setgxoutstreamine
gsn_streamline
一维数据图
setgxoutbar/line/linefill
gsn_xy与各种属性联合使用达到目的,其中line是最简单的。
单线line图
setgxoutline
gsn_xy
直方图
setgxoutbar
gsn_xy,之前设置gsnScale=True(效果见图1),还可以使用gsn_histogram来统计一组数据的分布情况,分别落在什么区间,也就是说x轴是数值,y轴是发生频率或次数(有点概率密度的意思)(效果见图2)
两单线着色图
setgxoutlinefill(效果见图3)
gsn_xy,之前设置属性(效果见图4)
二维场方格子填充图
setgxoutfgrid
同等值线图画法,设置相应的属性
误差盒子图
setgxouterrbar
gsn_xy与相应属性联合使用达到目的
5.grads与ncl的函数对应关系
grads函数
ncl函数
平均函数
ave(var,t/lon/lat=?
t/lon/lat=?
inc,flag),求平均
avg,dim_avg,dim_avg_n,dim_avg_n_Wrap,
dim_avg_Wrap
纬向平均
ave(var,x=x1,x=x2)
同上
时间平均
ave(var,t=t1,t=t2,dt)
同上,外加clmMonLLLT,clmMonLLT,clmMonTLL
clmMonTLLL
高度权重平均
vint(ps,exp,top)
dim_avg_wgt,dim_avg_wgt_n,dim_avg_wgt_n_Wrap
dim_avg_wgt_Wrap
区域面积平均
aave(u,x1=x,x=x2,y=y1,y=y2)
同上,注意一下参数的设定技巧,还可以直接使用:
wgt_areaave,wgt_areaave2,wgt_areaave_Wrap
垂直涡度
hcurl(u,v)
uv2vr_cfd,uv2vrF,uv2vrf,uv2vrF_Wrap
uv2vrG,uv2vrg,uv2vrG_Wrap
水平散度
hdivg(u,v)
uv2dv_cfd,uv2dvF,uv2dvf,uv2dvF_Wrap
uv2dvG,uv2dvg,uv2dvG_Wrap
取样稀疏化
skip(u,dx,dy)
没有函数,可以直接引用u(...,:
:
dx,:
dy)
差分函数
cdiff(u),为中央差分函数
center_finite_diff,center_finite_diff_n
九点滑动平均
smth9(u)
smath9,smath9_Wrap
三角函数
sin,cos,tan
sin,cos,tan,此外还有反三角函数atan,acos,asin不记得
Pi=3.141592653的人一般这样表示之,pi=atan(1.0)*4,
经常可以在ncl脚本中看得到
对数指数函数
exp,log,log10
exp,log
求和
sumg
sum,dim_sum,dim_sum_n,dim_sum_n_Wrap
dim_sum__Wrap
权重求和
sum
与权重平均一致,avg对应sum就好了
IDL绘图通用参数(和Fortran语言类似,变量名关键字不区分大小写,字符串内部区分大小写)。
position
定位图形位置大小,格式position=[x0,y0,x1,y1],(x0,y0)是左下角坐标,(x1,y1)是右上角坐标。
0~1之间。
title
图名,格式title='
Graphicname'
(单引号和双引号通用,又和Fortran一样,ncl绝对不可以)
subtitle
副标题名,格式subtitle='
Graphicname2'
charsize
字符大小(默认值1.0),格式charsize=2.0(放大了喔)
charthick
字符粗细或厚度,格式charthick=2.0(默认值1.0,此处加粗了喔)
font
字符的字体索引号(-1,0或者1)希腊字母可以通过latex语法输入,和matlab一样
color
颜色索引号
linestyle
线型
ticklen
刻度尺度(默认值0.02)
thick
线宽(默认值1.0)
psym
符号代码(见下文散点图介绍)
symsize
符号大小(默认值1.0)
/[xyz]log
坐标是否取对数,默认值是线型
/noeraze
与matlab的holdon有的一拼,和grads的clear作用相反
/nodata
不做图,数据从图中隐藏,只显示轴
/noclip
不裁剪
一般轴的性质设置
[xyz]range
轴范围(默认值:
自动)
[xyz]title
标题字符(默认值:
无)
[xyz]charsize
字符大小(默认值:
1.0)
[xyz]style
轴类型(默认值:
0;
可取数值0~31)
这个要细说一下1:
由xrange和yrange指定范围
2:
在轴范围的每一边留有空余
4:
不显示整个坐标轴
8:
只在左边或者下边显示坐标轴
16:
不将y轴的起始值强行规定为0
[xyz]margin
轴边缘空白,单位是字符间隔(默认值:
xmargin=[10,3],ymargin=[4,2])
[xyz]minor
最小刻度间的数目
[xyz]thicklen
刻度长度(默认值:
0.02)
[xyz]gridstyle
标注方格的线型(0~5,0为默认值)
[xyz]tickformat
刻度格式
[xyz]ticks
主要刻度间的数目
[xyz]tickv
要标注的刻度数组
[xyz]tickname
刻度标注数组
/ynozero
y刻度不从0开始
1.1-D单线图
1)IDL单线图:
PLOT,[X,]
Y
[,/ISOTROPIC][,MAX_VALUE=value][,MIN_VALUE=value][,NSUM=value][,/POLAR][,THICK=value][,/XLOG][,/YLOG][,/YNOZERO]
[,BACKGROUND=color_index][,CHARSIZE=value][,CHARTHICK=integer][,CLIP=[X0,
Y0,
X1,
Y1]][,COLOR=value][,/DATA|,/DEVICE|,/NORMAL][,FONT=integer][,LINESTYLE={0|1|2|3|4|5}][,/NOCLIP][,/NODATA][,/NOERASE][,POSITION=[X0,
Y1]][,PSYM=integer{0to10}][,SUBTITLE=string][,SYMSIZE=value][,/T3D][,THICK=value][,TICKLEN=value][,TITLE=string]
[,{X|Y|Z}CHARSIZE=value]
[,{X|Y|Z}GRIDSTYLE=integer{0to5}]
[,{X|Y|Z}MARGIN=[left,
right]]
[,{X|Y|Z}MINOR=integer]
[,{X|Y|Z}RANGE=[min,
max]]
[,{X|Y|Z}STYLE=value]
[,{X|Y|Z}THICK=value]
[,{X|Y|Z}TICK_GET=variable]
[,{X|Y|Z}TICKFORMAT=string]
[,{X|Y|Z}TICKINTERVAL=
value]
[,{X|Y|Z}TICKLAYOUT=scalar]
[,{X|Y|Z}TICKLEN=value]
[,{X|Y|Z}TICKNAME=string_array]
[,{X|Y|Z}TICKS=integer]
[,{X|Y|Z}TICKUNITS=string]
[,{X|Y|Z}TICKV=array]
[,{X|Y|Z}TITLE=string]
[,ZVALUE=value{0to1}]
其中[]为可选项,称作关键字,这是IDL过程中的一个设置(IDL程序包括过程和函数,过程pro相当于FORTRAN的子程序,自定义函数就不必多说了吧。
以上关键字都具有单词本身的实际意义。
比如,选择了plot,x,y横坐标自然由x数组决定,否则的话,横坐标从0开始,以size(y)-1结束。
再比如,选择了/ISOTROPIC的话,x和y方向的比例就会一致,这在画绘制剖面图时是很危险的,因为垂直尺度一般比水平尺度小很多,所以此项要慎重选择。
再例如,若希望y轴以log的数值标注,此时打开开关/ylog。
还有就是IDL和matlab在绘制极坐标单线时很方便的,对于IDL而言,选择激活/POLAR,而matlab有单独的函数处理极坐标单线。
plot的很多参数都是上面介绍的通用参数。
2)NCL单线图
gsn_xy
gsn_y
3)grads单线图
4)MATLAB单线图
plot(Y)
plot(X1,Y1,...,Xn,Yn)
plot(X1,Y1,LineSpec,...,Xn,Yn,LineSpec)
plot(...,'
PropertyName'
PropertyValue,...)
2.重叠图
1)IDL重叠图
OPLOT,[X,]
[,MAX_VALUE=value][,MIN_VALUE=value][,NSUM=value][,/POLAR][,THICK=value[,CLIP=[X0,
Y0,X1,
Y1]][,COLOR=value][,LINESTYLE={0|1|2|3|4|5}][,/NOCLIP][,PSYM=integer{0to10}][,SYMSIZE=val