游子 发表于 2012-12-1 11:06:03

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

本帖最后由 游子 于 2012-12-21 11:07 编辑

经过绘图软件的学习,稍微将各个绘图软件的出图命令整理了一下,供大家交流、学习、使用。
下文以IDL的常用数据图形显示过程(pro)为主线,逐条写下去。每个绘图软件都有自身的优势和不足,在绘图时,大家可以根据自己的喜好和方便程度自行选择。由于NCL和grads的对应命令我在两篇帖子上已经详述了,就不在赘述了。先写一下IDL绘图通用参数(和Fortran语言类似,变量名关键字不区分大小写,字符串内部区分大小写)。position 定位图形位置大小,格式position=,(x0,y0)是左下角坐标,(x1,y1)是右上角坐标。0~1之间。
title      图名,格式title='Graphic name'(单引号和双引号通用,又和Fortran一样,ncl绝对不可以)
subtitle   副标题名,格式subtitle='Graphic name2'
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)
/log 坐标是否取对数,默认值是线型
/noeraze 与matlab的hold on有的一拼,和grads的clear作用相反
/nodata不做图,数据从图中隐藏,只显示轴
/noclip    不裁剪
一般轴的性质设置
range     轴范围(默认值:自动)
title      标题字符(默认值:无)
charsize字符大小(默认值:1.0)
style     轴类型(默认值:0;可取数值0~31)
                这个要细说一下1:由xrange和yrange指定范围
                                        2: 在轴范围的每一边留有空余
                                        4:不显示整个坐标轴
                                        8:只在左边或者下边显示坐标轴
                                    16:不将y轴的起始值强行规定为0
margin    轴边缘空白,单位是字符间隔 (默认值:xmargin=,ymargin=)
minor       最小刻度间的数目
thicklen    刻度长度(默认值:0.02)
gridstyle 标注方格的线型(0~5,0为默认值)
tickformat 刻度格式
ticks          主要刻度间的数目
tickv          要标注的刻度数组
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=0, Y0, X1, Y1]] [, COLOR=value] [, /DATA | , /DEVICE | , /NORMAL] [, FONT=integer] [, LINESTYLE={0 | 1 | 2 | 3 | 4 | 5}] [, /NOCLIP] [, /NODATA] [, /NOERASE] [, POSITION=0, Y0, X1, Y1]] [, PSYM=integer{0 to 10}] [, SUBTITLE=string] [, SYMSIZE=value] [, /T3D] [, THICK=value] [, TICKLEN=value] [, TITLE=string]
[, {X | Y | Z}CHARSIZE=value]
[, {X | Y | Z}GRIDSTYLE=integer{0 to 5}]
[, {X | Y | Z}MARGIN=, right]]
[, {X | Y | Z}MINOR=integer]
[, {X | Y | Z}RANGE=, 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{0 to 1}] 其中[]为可选项,称作关键字,这是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单线图
   set gxout line
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=0, Y0, X1, Y1]] [, COLOR=value] [, LINESTYLE={0 | 1 | 2 | 3 | 4 | 5}] [, /NOCLIP] [, PSYM=integer{0 to 10}] [, SYMSIZE=value] [, /T3D] [, ZVALUE=value{0 to 1}]
使用这个是前面已经使用plot,虽然叠加其他曲线,常用来绘制两组或多组时间序列,比较趋势走向、转折点、突变点等
    2) NCL重叠图
   先将多组时间序列写在一个二维数组中,直接绘制单线图,就会出多组曲线,还可以配置上相应的属性,这样以来各条曲线可以不同的颜色、线型、粗细显示,使得数据的可读性更强
   等值线矢量图上色图使用overlay叠加。
   还有提供特殊的叠加图
    gsn_csm_pres_hgt_vector
    gsn_csm_vector_scalar_map_ce
    gsn_csm_vector_scalar_map_polar
   3) grads单线图
   只要不清屏,单线会一直叠加下去。
    4) MATLAB单线重叠图
   plotyy(x1,y1,x2,y2)
    这个函数出图会有两个y轴,一个在左边,一个在右边。EXCEL也具有这个功能。重叠图还可以叠加画,键入hold on后,重复使用plot也可以达到目的。但是使用hold叠置的图形线型和颜色比较单调,而plotyy还是以不同颜色显示的,比较爽。
3. 散点图
   1) IDL散点图    plot,x,y,psym =1
psym属于参数,注意和关键字的区别(关键字是开关,打开了就是True,否则就是False;而参数就不同了,可以设置很多数值)。psym参数可以取0——8九个数(0:无,1:+,2:-,3:*,4:.;5:<>(菱形);6:方块,7:叉号;8:自定义)
   2) NCL散点图
   gsn_xy加上相应的属性
   3) grads散点图
   set gxout line
   set ccolor 1   *(白色,看不到;或者0,黑色,在黑色背景下看不见,比较灵活喔)
   set cmark marker*(marker 取值0——5)
   4) matlab散点图
   一言以蔽之,简单的一笔
   plot(x,y,'.')或者plot(x,y,'*')
   也可以和句柄一起使用,这只线型散点样式,举个例子吧:
   plot(x,y,'--rs','LineWidth',2,...
                'MarkerEdgeColor','k',...
                'MarkerFaceColor','g',...
                'MarkerSize',10)
4. 极线图
    1) IDL极线图
   plot,r,t,/polar
    2) MATLAB极线图
      polar(theta,rho)
5. 等值线图
   1) IDL等值线图
   CONTOUR, Z [, X, Y] [, C_ANNOTATION=vector_of_strings] [, C_CHARSIZE=value] [, C_CHARTHICK=integer] [, C_COLORS=vector] [, C_LABELS=vector{each element 0 or 1}] [, C_LINESTYLE=vector] [, C_ORIENTATION=degrees] [, C_SPACING=value] [, C_THICK=vector] [, /CELL_FILL | , /FILL] [, /CLOSED] [, /DOWNHILL] [, /FOLLOW] [, /IRREGULAR] [, /ISOTROPIC] [, LEVELS=vector] [, NLEVELS=integer{1 to 60}] [, MAX_VALUE=value] [, MIN_VALUE=value] [, /OVERPLOT] [{, /PATH_DATA_COORDS, PATH_FILENAME=string, PATH_INFO=variable, PATH_XY=variable} | , TRIANGULATION=variable] [, /PATH_DOUBLE] [, /XLOG] [, /YLOG] [, ZAXIS={0 | 1 | 2 | 3 | 4}]
在这个过程中参数和关键子是很多的,下面大致介绍一下一些主要参数的主要用法
levels    设置等值线级别
c_labels 与levels配合使用,决定是否标注等值线的数值
            例如c_labels=这就是隔一条标注一个,1代表标注,0代表不标注
position,title,title等通用参数
c_charsize 等值线标注大小
c_charthick 字符粗细或者厚度
c_annotation 字符串数组标注等值线,代替等值线数值
c_colors      颜色数组
c_linestyle   线型数组
min_value   相当于grads的set cmin min
max_value    相当于grads的set cmax max
下线面是常用的关键词选项
/overplot    如果前面已经有图,此处相当于ncl的overlay
                  相当于matlab的hold on, 相当与grads的什么也不做(未使用clear(c),连续使用dispay(d)
/irregular   不规则数据输入,适合用于台站资料处理
/fill             相当于ncl的cnFillOn = True,或者grads的set gxout shaded
/cell_fill       单元格填充,grads中也有此功能set gxout fgrid,与set fgvals Varn coln(多次设置)
   2) NCL等值线图
   gsn_csm_contour
   gsn_csm_lat_time
   gsn_csm_pre_hgt
   gsn_csm_map_ce
   gsn_csm_contour_map_ce
   gsn_csm_ contour_map_polar
   3) grads等值线图
    set gxout contour
   4)MATLAB等值线图
contour(Z)
contour(Z,n)
contour(Z,v)
contour(X,Y,Z)
contour(X,Y,Z,n)
contour(X,Y,Z,v)
contour(...,LineSpec)
contour(axes_handle,...)
= contour(...)
和句柄联合使用效果更佳
6. 二维矢量图
   1) IDL 二维矢量图
    VELOVECT, U, V [, X, Y] [, COLOR=index] [, MISSING=value [, /DOTS]] [, LENGTH=value] [, /OVERPLOT] 所有plot的关键词都接受。
   2) NCL二维矢量图
   gsn_csm_vector
   gsn_csm_vector_map
   gsn_csm_vector_map_ce
   gsn_csm_vector_map_polar
   gsn_csm_sreamline_map_polar
   gsn_csm_vector_map_ce
   gsn_csm_vector_streamline_ce
   3)grads矢量图
   set gxout vector/stream/barb
   4)MATLAB矢量图
    quiver(x,y,u,v)
    quiver(u,v)
    quiver(...,scale)
    quiver(...,LineSpec)
    quiver(...,LineSpec,'filled')
    quiver(...,'PropertyName',PropertyValue,...)
    quiver(axes_handle,...)
----------------------------------------------------------------------------------------------------------
NCL和grads命令的对应关系,见前面两个帖子:
http://bbs.06climate.com/forum.php?mod=viewthread&tid=10541

http://bbs.06climate.com/forum.php?mod=viewthread&tid=10578


有时间再写一下Fortran/C/NCL/IDL/MATLAB/GRADS读取nc数据的方法:
http://bbs.06climate.com/forum.php?mod=viewthread&tid=11807(已出炉一部分)


两柯枣树 发表于 2012-12-1 11:13:51

你都忙这些啊

游子 发表于 2012-12-1 11:20:52

两柯枣树 发表于 2012-12-1 11:13 static/image/common/back.gif
你都忙这些啊

这些是业余爱好

mofangbao 发表于 2012-12-1 12:58:36

游子 发表于 2012-12-1 11:20 static/image/common/back.gif
这些是业余爱好

有业余的东西做是一件又辛苦又享受的事儿,加油~发上来后可以把前面上次发的东西链接一下~

zqq0ew0 发表于 2012-12-1 14:20:04

什么啊 也没有{:e311_b:}{:e311_b:}{:e311_b:}{:e311_b:}{:e311_b:}{:e311_b:}

游子 发表于 2012-12-3 09:25:12

mofangbao 发表于 2012-12-1 12:58 static/image/common/back.gif
有业余的东西做是一件又辛苦又享受的事儿,加油~发上来后可以把前面上次发的东西链接一下~

求贡献分呢。

爱上温哥华 发表于 2012-12-3 19:07:14

{:soso_e179:}

ztftom 发表于 2012-12-3 21:42:26

非常好!

ztftom 发表于 2012-12-3 21:42:29

非常好!

小草 发表于 2012-12-5 09:41:14

楼主辛苦了!
页: [1] 2 3 4 5 6 7 8
查看完整版本: IDL/NCL/GRADS/MATLAB 绘图命令对应关系一览表