Example1——XYplots这个例子介绍了NCL的基础知识,例如如何开始和结束NCL脚本,如何创建和初始化变量,如何创建和绘制XY坐标图,以及如何设置resources来改变XY坐标图的外观。此外还介绍了NCL变量包含元数据的概念,以及展示了如何从ASCII文件读取数据。这个例子创建了5个XY坐标图。前四个图使用了NCL脚本生成的数据,第五个图读取了ASCII文件的数据。第一个图有一个曲线,其他图右多条曲线。每个图相对前一个图来讲都有一些改动的地方,例如添加标题、线标签,改变线条颜色和粗细,添加标记。在以后的例子中将有更加复杂的XY坐标图。请注意,“line”和“curve”在这个示例中互换使用,用来表示XY坐标图的曲线。分号“;”在NCL脚本中表示允许注释。所有的注释都必须以分号开头,任何在分号之后和下一个换行符前的东西都将忽略。注释可以在一行中单独出现,也可以出现在NCL命令之后。但是在同一行注释不能出现在命令之前,因为注释符之后所有的东西都被忽略。运行这个示例,必须下载以下文件:gsun01n.ncl,然后键入:nclgsun01n.ncl示例1代码及解释1.load$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl;LoadtheNCLfilethatcontainsthegsn_*载入本示例使用的包含函数和程序(以gsn开头的)的NCL脚本。NCL中的load语句的作用和C和Fortran90程序中include作用一样。2.;functionsusedbelow.3.begin每个NCL脚本都以begin声明开始,以end声明结束。4.x=new(9,float);Definetwo1Darraysof9elementseach.5.y=new(9,float)用new语句来声明2个各有9个元素的1维浮点数组。new语句的第一个参数表明变量的维度,第二个参数表明类型。在这里,这两个new语句是多余的,因为在NCL中你可以通过初始化它们来声明变量(就如下两行所示)。所有有关NCL变量类型的内容,请参见NCLReference的“NCLdatatypesoverview”。6.7.x=(/10.,20.,30.,40.,50.,60.,70.,80.,90./)8.y=(/0.,0.71,1.,0.7,0.002,-0.71,-1.,-0.71,-0.003/)为刚声明的两个1维数组赋值。在赋值语句中,在以逗号分隔开的数组值之前是“/”,以“/”结束。NCL的数组是仿照C程序语言中的数组,也就是它们都是row-major,而且从0开始(Fortran中是column-major,并且从1开始)。9.10.wks=gsn_open_wks(x11,gsun01n);OpenanX11workstation.要NCL生成图形,就需要告诉它哪里绘制图形。选择也就是熟知的工作站,是一个X11窗口,一个NCAR图形图元文件(NCGM),或者是PostScript文件(正常、包覆或者包覆交换regular,encapsulatedorencapsulatedinterchange)。gsn_open_wks函数打开上述类型的一个工作站,因此才可以在上面画图。第一个参数(一个字符串),表示你想要绘制的图形在哪儿输出(“X11”是X11窗口,“ngcm”是NCGM,“ps”是“eps”或者“epsi”是PsotScript文件)。第二个参数(也是一个字符串)决定了输出图像的名字(name.ncgm是NCGM文件,name.{ps,eps,epsi}是PsotScript文件,name就是输入的第二个参数。第二个参数还有其他作用,将在例8和例9中讨论。gsn_open_wks返回的值是图形类型的特殊变量,这个NCL的变量类型来决定图形对象。11.12.plot=gsn_xy(wks,x,y,False);DrawanXYplotwith1curve.gsn_xy函数用来创建并绘制XY坐标图,并且以XY坐标图图形类型变量作为返回值(大多数情况下,可以不需要理会这个返回值)。第一个参数是你想要绘制XY坐标图的工作站(从上次调用gsn_open_wks的返回的变量)。接下来的两个参数是想要绘制的包括X、Y数组的变量。这两个参数可以是float、double或integer类型,可以是一维或者多维(下面会解释)。最后一个参数是一个逻辑值,表明是否设置任何“resources”来改变坐标图外观。要得到NCL提供的默认的XY坐标图,将最后一个参数留为False(在NCL中,逻辑值设为特殊关键字,True或者False,开头字母必须大写)。gsn_xy函数绘制带有刻度标记的XY坐标图。对于默认的XY图,并没有提供标题或者X/Y轴标签,但是这些都可以很容易地添加,正如下面几个图所示。你还可以改变刻度的格式,如例7所示。默认情况下,当坐标图绘制到X11窗口或者NCGM文件,有一个黑色的背景和白色的前景。如果是绘制到PostScript文件,是白色的背景和黑色的前景。在后面的实例中,可以学到如何来设置背景和前景的颜色。当这样做的时候,无论在什么工作站绘制,图都有一样的颜色。一旦你打开了X11类型的工作站,gsn_xy函数就产生一个X11窗口,你需要点击鼠标左键前进到下一帧。13.14.;-----------Beginsecondplot-----------------------------------------在代码中分开,来表示进入第二个图的代码。绘制带有三条曲线的XY坐标图,每条曲线有9个点。15.16.y2=(/(/0.,0.7,1.,0.7,0.,-0.7,-1.,-0.7,0./),\17.(/2.,2.7,3.,2.7,2.,1.3,1.,1.3,2./),\18.(/4.,4.7,5.,4.7,4.,3.3,3.,3.3,4./)/)定义了一个3×9的数组(第一维表示曲线的数目,第二维表示点的数目)。注意到此时并没有使用new来声明这个数组,因为在NCL可以通过赋值来创造变量。NCL能够通过初始化来决定一个变量的维度和类型。例如,创建一个叫做i的2×3×4的整型数组,其每个值都设为0,可以使用如下NCL语句:i=(/(/(/0,0,0,0/),(/0,0,0,0/),(/0,0,0,0/)/),\(/(/0,0,0,0/),(/0,0,0,0/),(/0,0,0,0/)/)/)以上的也可以用下面的两行来完成:i=new((/2,3,4/),integer)i=0在NCL中的“\”用来表示行连续符。19.20.x@long_name=X;Defineattributesofx21.y2@long_name=Y;andy2.NCL变量比传统程序语言如C和Fortran中使用的变量更一般。通常,他们包含值,但它们也可能包含这个变量的辅助信息。这种额外的信息通常被称为“元数据”。元数据被分成三种类型:属性、命名的维和坐标变量(attributes,nameddimensions和coordinatevariables)。可以给变量分配无限量的属性数目,每个分配给变量的属性都会使用“@”符号。在20-21行,对x和y2变量都创建了叫做“long_name”的属性。更多的NCL变量属性的信息,请参阅“Basics”中的“Variable”一节。默认情况下,无论是X或者Y数据数组设置了名叫“long_name”的属性(在netCDF文件中通常如此),那么gsn_xy会用这个属性在XY坐标图中作为X和/或Y轴的标签(除非你通过设置resources来覆盖,如下面所示)。22.23.plot=gsn_xy(wks,x,y2,False);DrawanXYplotwith3curves.绘制一个新的坐标图,使用与第一个图形相同的X数组,和刚定义的新的y2数组。因为X只是一个一维的数组,NCL将x数组的值和y2数组中三条曲线的值进行配对。如果在3×9的Y数组以外还声明了一个3×9的X数组,那么Y数组中的每个值都会和相对应的X数组的每个值对应。请注意,如果是在一个XY坐标图中绘制超过一条曲线的话,那么gsn_xy会用独特的虚线类型来绘制每条曲线。共有16种不同的虚线类型,在图形文件中查看“dashpatterns”列表。注意到由于属性“long_name”而出现的新的X和Y轴标签。24.25.;-----------Beginthirdplot-----------------------------------------画出相同的三条曲线,但每条曲线有不同的颜色和粗细。26.27.resources=True;Indicateyouwantto28.;setsomeresources.这一行引入了“resources”的概念来改变坐标图的外观。在NCL,有上百个resources,你可以用来改变线条颜色和粗细,添加标题、改变字体、创建标签和图例、改变地图投影、改变坐标图大小、屏蔽某些区域等等。同样还有一些resources可以用来改变坐标图的数据,例如设置最小值、最大值,选择数据的子集,或者设置缺失值等。大多数resources有默认值,当你运行NCL脚本的时候通过NCL自动设置的。例如,曲线的粗细的hard-coded值是1.0,但是一条曲线的最大和最小值是根据XY坐标图中用到的最大值和最小值自动设置的。如果你想要改变默认值的话,你只有设置一个resource。Resources通过他们的图形对象的类型或者表述的数据类型进行分类,这些分组在这里或其他示例中讲进行讨论。为gsn_*组别的函数设置resources,首先定义逻辑类型的变量并将其值设为True,然后制定这个逻辑变量的resources。如上所述,一个变量可以有无数个属性。你创建的这个属性需要通过为resources设置适当的gsn_*plottingroutine,使其有效。重要说明:这一设置resources的方法是针对gsn_*组别的函数和程序的。使用straightNCL代码设置resources是完全不同的,在“Goingbeyondthebasics”一节中有介绍。29.30.resources@xyLineColors=(/2,3,4/);Definelinecolors.设置xyLineColors的resources,为每条线定义不同的颜色。默认值是1,这是前景色(此处是白色)。这里制定的颜色是通过整数index值来表示的,每个index在预先定义的颜色表中对应一个颜色(通常也成为颜色图)。因为在这个示例中没有定义颜色表,因此NCL提供了默认的有32个index的颜色涂(后面的示例将会展示如何创建自己的颜色图)。要看这个默认的颜色表,参见NCARGraphicsReferenceManual的“Clortables”一节。在默认的颜色表中,整数2、3、4分别代表红色、绿色和蓝色。颜色resources也可以用命名的颜色来设置,因此xyLineColorsresources也可以用以下代码来设置:resources@xyLineColors=(/red,green,blue/)在示例4和7中将有更详细的命名的颜色。如果你想要每条曲线的颜色一样,但希望不是“1”,那么你可以使用单数resource,xyLineColor。XY坐标图resources属于“XyPlot”组,以“xy”开头。每个Xy组的resource在描述中都要说明类型和默认值。31.resources@xyLineThicknesses=(/1.,2.,5./);Definelinethicknesses32.;(1.0isthedefault).使用xyLineThicknessesresource,为每条曲线定义不同的粗细,默认的粗细是1,所以2是默认粗细的2倍,5是5倍,以此类推。同样,你可以使用单数resourcexyLineThi