IDL等绘图命令对应关系一览表汇编.docx

上传人:b****4 文档编号:5403352 上传时间:2022-12-16 格式:DOCX 页数:11 大小:25.60KB
下载 相关 举报
IDL等绘图命令对应关系一览表汇编.docx_第1页
第1页 / 共11页
IDL等绘图命令对应关系一览表汇编.docx_第2页
第2页 / 共11页
IDL等绘图命令对应关系一览表汇编.docx_第3页
第3页 / 共11页
IDL等绘图命令对应关系一览表汇编.docx_第4页
第4页 / 共11页
IDL等绘图命令对应关系一览表汇编.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

IDL等绘图命令对应关系一览表汇编.docx

《IDL等绘图命令对应关系一览表汇编.docx》由会员分享,可在线阅读,更多相关《IDL等绘图命令对应关系一览表汇编.docx(11页珍藏版)》请在冰豆网上搜索。

IDL等绘图命令对应关系一览表汇编.docx

IDL等绘图命令对应关系一览表汇编

IDL、NCL、GRADS、MATLAB绘图命令对应关系一览表

1.grads的数据文件与ncl的什么文件对应?

grads只支持按照一定顺序存储的二进制数据文件,后缀名以.grd或者.dat或者.grb结束。

这种数据必须以时间为最外层,然后每个变量按照向量形式存储,每个变量由外向内的存储顺序是高度(或等压面)==》纬度==》经度。

这必须注意,否则画图容易出现一堆一堆的乱线条,这就说明你的数据没有按照grads的要求存储。

再看看ncl,可以说ncl支持绝大多数各种数据的读写,包括netcdf,hdf,以及二进制数据甚至ASCII码(如果说是十进制数据或许你会更熟悉),前两种数据一般都有头文件,不能用C语言或者Fortran读取,都需要插件才可以读取,ncl可以直接读取,matlab中也可以直接读取NETCDF格式(.nc)的数据。

grads中可以读取按照说明存取的NC数据,这种数据必须又正确的时间说明,也就是说时间必须是真实的,有些模式模拟出来的数据grads的sdfopen命令是打不开的,因为一般模式都是nonleaprun,都是平年,没有设定闰年,造成了时间说明不真实,grads就会报错。

那么grads'如何使用NC数据呢?

所以建议使用ncl转换数据,将NC数据,hdf数据或者十进制数据转换成grd数据,供grads使用。

这样说明是在是太空洞了,那么下面我举个例子吧。

eg1)使用grads将netcdf数据转换成grd数据

'reinit'

var.1='air';var.2='hgt';var.3='uwnd'

var.4='vwnd';var.5='omega';var.6='shum'

j=6

while(j<=6)

'setfwrite/disk3/users/Rao_Jian/ERA-Interim-daily/entropy/'var.j'.daily.1979-2010.grd'

'setgxoutfwrite'

i=1979

while(i<=2010)

'sdfopen/disk3/users/lbq/ERA-Interim-daily/pressure/'var.j'.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)

'sett'tt

zz=1

while(zz<=37)

'setx1240'

'sety1121'

'setz'zz

'd'var.j''

zz=zz+1

endwhile

tt=tt+1

endwhile

else

while(tt<=365)

'sett'tt

zz=1

zz=1

while(zz<=37)

'setx1240'

'sety1121'

'setz'zz

'd'var.j''

zz=zz+1

endwhile

tt=tt+1

endwhile

endif

i=i+1

name='/disk3/users/lbq/ERA-Interim-daily/pressure/'var.j'.interim.'i'.nc'

'close1'

endwhile

'disablefwrite'

j=j+1

endwhile

eg2)使用ncl将数据输出成二进制数据,grads可以使用(截取部分)

patho        ="/disk3/users/Rao_Jian/Hadley/"

system("rm"+patho+"ev_ts.grd")

system("rm"+patho+"ev_ts2.grd")

system("rm"+patho+"ev_ts.txt")

system("rm"+patho+"ev_ts2.txt")

dont=0,719

fbindirwrite(patho+"ev_ts.grd",ev_ts(:

nt));写成二进制数据,供grads使用

enddo

fbindirwrite(patho+"ev_ts2.grd",ev_ts(time|:

evn|:

))

asciiwrite(patho+"ev_ts.txt",ev_ts(time|:

evn|:

));写成十进制数据,可以贴到EXCEL中使用

asciiwrite(patho+"ev_ts2.txt",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"

dudP0!

1="lat"

dudP0!

2="lon"

dudP0!

3="level"

dudP0&time=u&time

dudP0&level=u&levelist

dudP0&lat=u&latitude

dudP0&lon=u&longitude

copy_VarCoords(dudP0,dvdP0)

copy_VarCoords(dudP0,dPTdP0)

在上面的例子中,!

是用来给坐标维度命名的,&是用来引用某一维度数值的,copy_VarCoords是ncl的贡献函数库中的子程序,将一个变量的坐标信息原封不动的传给另一个变量。

必须注意的是,绘制地图底图时,还要涉及到属性的概念,用@来引用或者声明。

所以在给变量声明经纬度之名时,还要声明经纬度之属性,保证ncl能找到地图坐标,保证等值线或矢量与地图坐标对应,不发生错位。

eg4.3)ncl中声明坐标经纬度属性

pvlvl&lev  =lvl                ;isentropiclevels

  pvlvl&lat  =u&latitude

  pvlvl&lon  =u&longitude

  pvlvl&lat@units  ="degrees_north"

  pvlvl&lon@units  ="degrees_east"

  pvlvl&lev@units  ="K"

  pvlvl&time@units="monthssince1900-01-01"

注意:

pvlvl&lat@units  ="degrees_north"  @是接在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)

setgxoutcontour

setmprojrobinson

gsn_csm_contour_map_ce

等值线+极射赤面投影

(PolarStereographicProjections)

  setgxoutcontour

setmprojnps/sps

gsn_csm_contour_map_polar(之前设置:

gsnPolar ="NH"/gsnPolar ="SH")

填色等值线图

setgxoutshaded

gsn_csm_contour,之前设置

gsn_define_colormap(wks,colors),cnFillOn=True

填色等值线+等值线

setgxoutshaded 

d..

setgxoutcontour

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, Y0, X1, 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单线图

  setgxoutline

  4)MATLAB单线图

  plot(Y)

  plot(X1,Y1,...,Xn,Yn)

  plot(X1,Y1,LineSpec,...,Xn,Yn,LineSpec)

  plot(...,'PropertyName',PropertyValue,...)

2.重叠图

  1)IDL重叠图

  OPLOT,[X,] Y [,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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1