NCL画图个例讲解
- 格式:pdf
- 大小:791.05 KB
- 文档页数:79
NCL学习笔记(天⽓分析图)⼀、风向风速⽮量图先看⼀个风向风速的样例图⽚:这⾥与上⼀篇⽓温分布图的绘制⽅法基本相同,不同的地⽅在于wres@vcRefMagnitudeF = 20. ; make vectors largerwres@vcRefLengthF = 0.030 ; ref vec lengthwres@vcGlyphStyle = "WindBarb" ; select wind barbswres@vcMinDistanceF = 0.025 ; thin out windbarbswres@vcWindBarbColor = 3以及最后调⽤的绘制函数wplot = gsn_csm_vector_map(wks,ddata1,vdata1,wres) ; create plotddata1是插值后的风向,vdata1是插值后的风速由于wplot要和之前的map叠加,使⽤overlayhas函数,最后在显⽰叠加后的mapoverlay(map,wplot)draw(map)⼆、地⾯⽓象要素天⽓分析图改图为绘制样例,不是真实数据。
1.各要素分析图标需要50char的字符串⽤来显⽰图中左侧的图标,具体数据格式如下:example:imdat ="11721700181008020050300004983052026604007289086925"A string (or array) of 50 characters encoded as per the WMO/NOAA(世界⽓象组织/美国国家海洋⼤⽓局) guidelines. If an array, it must have the same shape as the x and y arrays.In more detail (where the characters are numbered from left to right, starting at character number 0):character 0 = iR - the precipitation data indicator (冰雹数据指数)character 1 = iX - weather data and station type indicator(天⽓数据和站点类型指数)character 2 = h - height above ground of base of lowest cloudcharacters 3-4 = VV - visibility in miles and fractions (能见度)character 5 = N - total amount of cloud cover (总云量)characters 6-7 = dd - direction from which wind is blowing (风向)characters 8-9 = ff - wind speed in knots(风速)If character 10 = "1", thencharacter 11 = sn - sign of temperaturecharacters 12-14 = TTT - current air temperatureIf character 15 = "2", thencharacter 16 = sn - sign of temperaturecharacters 17-19 = Td - dew pointIf character 20 = "3", thencharacters 21-24 = PO - station pressure (not plotted)If character 25 = "4", thencharacters 26-29 = PPPP - pressure reduced to sea levelIf character 30 = "5", thencharacter 31 = a - characteristic of barographcharacters 32-34 = ppp - pressure change, last 3 hrs.If character 35 = "6", thencharacters 36-38 = RRR - precipitationcharacter 39 = tR - time duration of precipitationIf character 40 = "7", thencharacters 41-42 = ww - present weathercharacter 43 = W1 - most significant past weathercharacter 44 = W2 - 2nd most sig. past weatherIf character 45 = "8", thencharacter 46 = Nh - Fraction of sky covercharacter 47 = CL - cloud type, low cloudscharacter 48 = CM - cloud type, medium cloudscharacter 49 = CH - cloud type, high clouds可以根据实际数据需要将数据转换成50char,传送给wmstnm(wks,lat_imdat,lon_imdat,imdat) 进⾏绘制2.冷暖峰wmsetp("fro","warm") ; Specify stationary front. ;cold or warm or stationary(interal)wmsetp("cfc",3) ; Use blue for the triangles.wmsetp("wfc",2) ; Use red for the bumps.wmsetp("swi",0.02) ; Increase the size of the bumps and triangles.wmsetp("nms",2) ; 设置峰的个数wmsetp("sig",0.005)wmsetp("slf",0) ;0 使⽤SL1和SL2 ,1 使⽤SL1 ,2 使⽤SL2 , 3 均不使⽤,默认值wmsetp("sl1",90.) ; 起始⽅向与X轴的夹⾓wmsetp("sl2",0.) ; 终⽌⽅向与X轴的夹⾓xlat = (/ 25., 30./) ; Latitudes.xlon = (/ 113., 116./) ; Longitudes.wmdrft(wks, xlat, xlon)3.绘制⾼低⽓压中⼼以⾼⽓压为例,⽤红⾊的"D"代表。
这里以绘制气温分布图为例,效果如下图:X 这里几点说明:1.ncl不支持中文显示,所有文字都是英文,但是支持很多样式的字体,参考2.图下方的labelbar只能在图的周围,不能放置在图内。
要想显示图下方的图例,就要使用legend而不是labelbar了。
使用NCL脚本绘制一张如上图所示的png图片主要分为以下几个步骤一、读取各站点的气温数据。
二、将站点数据使用各种差值函数转换成格点数据。
三、使用源对地图进行基本设置四、使用源对等值线填充进行基本设置五、使用源对labelbar进行基本设置六、生成png图片接下来将按照这几个步骤,详细介绍。
一、读取各站点的气温数据NCL支持的数据格式主要有netCDF文件(.nc .cdf)、HDF4(.hd .hdf)、HDF4-EOS(.hdfeos)、GRID-1/GRIB-2(.grb.grib)、CCMHistory Tape(.ecm),除此之外呢,它支持二进制文件和ascii文件,这两者是我们最熟悉的。
这里我们使用ascii文件,更多文件读取方式参考/Applications/list_io.shtml为了批量生成产品图片,需要配置文件设置数据来源以及图片生成后存放位置。
config.txt文件如下:One Hour of Temperature2010111502./t1//root/WorkSpace/MICAPS_surface/t1/10111502.000第一行是标题第二行是输出png图路径第三行是输入数据文件路径第四行是数据文件名在NCL脚本(temperature.ncl)中使用以下几行代码就可以了filepath = './config.txt' ;参数文件路径argu = asciiread(filepath,-1,'string') ;以字符串形式读取参数文件入数组argu lines = asciiread(argu(2)+argu(3),-1,'string') ;以字符串形式读取数据文件入数组linesstation = stringtofloat(str_get_field(lines(3::),1,' ')) ;从数组lines中获取站号lon = stringtofloat(str_get_field(lines(3::),2,' ')) ;从数组lines中获取经度值lonlat = stringtofloat(str_get_field(lines(3::),3,' ')) ;从数组lines中获取纬度值lat height = stringtofloat(str_get_field(lines(3::),4,' ')) ;从数组lines中获取海拔高度R = stringtofloat(str_get_field(lines(3::),5,' ')) ;从数组lines中获取站点数据值由于数据文件10111502.000的前3行是文件头,不包含数据,因此lines从第三行开始读取数据。
NCL绘图示例(三):小波图施宁(南京信息工程大学大气科学学院)beginf = addfile("./ENSO-index.nc", "r")ensoi = f->ensoitime = ensoi&yearN = dimsizes(ensoi);; 小波计算mother = 0 ; 母小波类型,通常为0,即'Morlet'小波。
其余两中被分别为1,'Paul'小波和2,'DOG' (derivative of Gaussian)小波dt = 1 ; 数组中数值之间的时间间隔,通常为1。
本例中表示间隔1年。
param = -1 ; 母小波参数。
如果param < 0,则使用默认数值,即采用'Morlet'小波时为6;Paul'小波为4;'DOG'小波为2s0 = dt ; 'Morlet'小波s0 = dt ; 'Paul'小波s0 = dt/4dj = 0.25 ; 常用设定jtot = 1+floattointeger(((log10(N*dt/s0))/dj)/log10(2.)) ; 常用设定npad = N ; 常用设定nadof = 0 ; 常用设定noise = 1 ; 常用设定,h红噪声检验siglvl = .05 ; 置信度水平isigtest= 0 ; 采用chi-square 检验;若为1则是对全部波谱进行时间平均检验w = wavelet(ensoi,mother,dt,param,s0,dj,jtot,npad,noise,isigtest,siglvl,nadof);************************************power = onedtond(w@power,(/jtot,N/)) ; 功率谱power!0 = "period" ; Y axispower&period = w@periodpower!1 = "time" ; X axispower&time = timepower@long_name = "Power Spectrum"power@units = "1/unit-freq";计算显著性( >= 1 则显著)SIG = power ; 复制元数据SIG = power/conform (power,w@signif,0)SIG@long_name = "Significance"SIG@units = " ";*************************************************wks = gsn_open_wks("eps","plot-enso-wavelet")gsn_define_colormap(wks,"BlAqGrYeOrReVi200")YLValues = (/1,2,4,8,16/)YLLabels = (/"1","2","4","8","16"/)res = Trueres@gsnDraw = Falseres@gsnFrame = Falseres@gsnRightString = " "res@gsnLeftString = " "res@trYReverse = True ; 倒置y-axisres@tmYLMode = "Explicit"res@tmYLValues = YLValuesres@tmYLLabels = YLLabelsres@tmLabelAutoStride = Trueres@trYMaxF = max(YLValues);res@trYMinF = min(YLValues)res@cnLinesOn = Falseres@cnLineLabelsOn = Falseres@cnInfoLabelOn = Falseres2 = resres@tiXAxisString = "Year"res@tiXAxisOffsetYF = 0.135res@tiYAxisString = "Years"res@cnFillOn = Trueres@cnFillMode = "RasterFill"res@cnRasterSmoothingOn = True;;;;;;;;;;;;;res2@cnLevelSelectionMode = "ManualLevels"res2@cnMinLevelValF = 0.00res2@cnMaxLevelValF = 2.00res2@cnLevelSpacingF = 1.00res2@cnFillScaleF = 0.5 ; 增加形状填充的密度(通过下面调用ShadeGtContour实现形状填充)plot = gsn_csm_contour(wks,power,res)iplot = gsn_csm_contour(wks,SIG,res2)opt = Trueopt@gsnShadeFillType = "pattern" ; 默认设置opt@gsnShadeHigh = 17 ;见附录图A.3iplot = gsn_contour_shade(iplot,-999.,1.,opt) ; 从大于等于1.的第一个等值线开始用形状为17填充overlay(plot,iplot) ; 在原图上添加显著性plot = ShadeCOI(wks,plot,w,time,False) ;;;添加各频率的功率gws = w@gwsresl = Trueresl@gsnFrame = Falseresl@gsnDraw = Falseresl@trYAxisType = "LogAxis"resl@trYReverse = True ; reverse y-axisresl@tmYLMode = "Explicit"resl@tmYLValues = YLValuesresl@tmYLLabels = YLLabelsresl@trYMaxF = max(YLValues)resl@trYMinF = min(YLValues)resl@tiXAxisString = "Global Wavelet Power" plotg = gsn_csm_xy(wks,gws,power&period,resl) ;; 将plotg添加至plot的右侧plotc = gsn_attach_plots(plot,plotg,res,resl) draw(plot)frame(wks)end。
res@gsnFrame = Falseres@gsnDraw = False ; don't draw plot yetres@mpMinLatF = 5 ; zoom in on a subregionres@mpMaxLatF = 35res@mpMinLonF = 110res@mpMaxLonF = 150res@mpOutlineOn = Trueres@pmTickMarkDisplayMode = "Always"map = gsn_csm_map(wks,res);--添加任意折线,表示出台风路径lnres = Truelnres@gsLineColor = "black"lnres@gsLineThicknessF = 1.5lnres@gsLineDashPattern = 0str = unique_string("string")map@$str$ = gsn_add_polyline(wks,map,lon,lat,lnres);;添加标识,表示出每个时次的台风中心位置mkres = Truemkres@gsMarkerSizeF = 0.01 ;大小。
在0~1范围内设置。
mkres@gsMarkerIndex = 3mkres@gsMarkerThicknessF = 1.5do i = 0, nrow-1mkres@gsMarkerColor = toint(floor(ncol/nbin*amp(i)-1)) ;在整个色板中准等距离的挑选颜色str = unique_string("string")map@$str$ = gsn_add_polymarker(wks,map,lon(i),lat(i),mkres)end do;--在图形正下方添加等级图例x_ndc = (/0.25,0.35,0.45,0.55,0.65,0.75/)y_ndc = (/0.14,0.14,0.14,0.14,0.14,0.14/)t_ndc = tostring(ispan(1,6,1)) ;假定已知等级为1、2 (6)mkres@gsMarkerSizeF = 0.01 ;标识的大小,在0~1范围内设置。
Example 1——XY plots这个例子介绍了NCL的基础知识,例如如何开始和结束NCL脚本,如何创建和初始化变量,如何创建和绘制XY坐标图,以及如何设置resources来改变XY坐标图的外观。
此外还介绍了NCL变量包含元数据的概念,以及展示了如何从ASCII文件读取数据。
这个例子创建了5个XY坐标图。
前四个图使用了NCL脚本生成的数据,第五个图读取了ASCII文件的数据。
第一个图有一个曲线,其他图右多条曲线。
每个图相对前一个图来讲都有一些改动的地方,例如添加标题、线标签,改变线条颜色和粗细,添加标记。
在以后的例子中将有更加复杂的XY坐标图。
请注意,“line”和“curve”在这个示例中互换使用,用来表示XY坐标图的曲线。
分号“;”在NCL脚本中表示允许注释。
所有的注释都必须以分号开头,任何在分号之后和下一个换行符前的东西都将忽略。
注释可以在一行中单独出现,也可以出现在NCL命令之后。
但是在同一行注释不能出现在命令之前,因为注释符之后所有的东西都被忽略。
运行这个示例,必须下载以下文件:gsun01n.ncl,然后键入:ncl gsun01n.ncl 示例1代码及解释1. load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" ; Load the NCL file that contains the gsn_*载入本示例使用的包含函数和程序(以gsn开头的)的NCL脚本。
NCL中的load语句的作用和C和Fortran90程序中include作用一样。
2.; functions used below.3. begin每个NCL脚本都以begin声明开始,以end声明结束。
4. x = new(9,float) ; Define two 1D arrays of 9 elements each.5. y = new(9,float)用new语句来声明2个各有9个元素的1维浮点数组。
res@trYMinF = -180;--坐标轴名称res@tiXAxisString = "year"res@tiYAxisString = "anomalies";--折线用不同类型、颜色、线型和粗细表示res@xyMarkLineModes = (/"MarkLines","Markers","Lines"/) ;设定折线的类型,如果都是“Markers”,则用标识表示折线res@xyMarkers = (/9,7,5/) ;设定折线上标识的类型,见标识图res@xyMarkerSizeF = 0.01 ;设定折线上标识的大小res@xyLineColors = colors ;折线颜色res@xyDashPatterns = (/0,1,3/) ;折线线型,见线型图res@xyLineThicknesses = (/1,2,4/) ;折线粗细,若设成统一粗细,则res@xyLineThicknessF = 2.0;--添加辅助线res@gsnYRefLine = 0 ; 绘制垂直于X轴的参考线res@gsnYRefLineDashPattern = 0 ; 设定其线型res@gsnYRefLineThicknessF = 0.5 ; 设定其粗细res@gsnYRefLineColor = "black";--图例res@pmLegendDisplayMode = "Always" ;绘制图例res@pmLegendWidthF = 0.2 ;图例宽度res@pmLegendHeightF = 0.12 ;图例高度res@pmLegendOrthogonalPosF = -0.38 ;向上移动图例res@pmLegendParallelPosF = 0.83 ;向右移动图例res@xyExplicitLabels = labels ;图例中每种折线的名称res@lgLabelFontHeightF = 0.015 ;每种折线名称的字体大小res@lgBoxMinorExtentF = 0.3 ;缩短图例中每种折线的长度res@lgItemOrder = (/2,1,0/) ;图例线条排列的顺序plot = gsn_csm_xy(wks,year,z2d,res)end。
NCL基本使用及实例演示```export NCARG_ROOT=/你的NCL安装路径export PATH=$NCARG_ROOT/bin:$PATHexport NCARG_LIB=/你的NCL库路径(可选)```接下来,我们将演示一些NCL的基本功能。
1.绘制简单曲线图```load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" beginx=(/0,1,2,3,4,5,6,7,8,9/)y=x^2wks = gsn_open_wks("png", "line_plot")res = Trueplot = gsn_csm_xy(wks, x, y, res)gsn_panel(wks, plot)gsn_frame(wks)end```上面的代码首先加载了NCL的一些常用函数和库,然后定义了x和y两个变量,并赋予它们一些值。
接下来,我们创建了一个绘图工作空间(wks),并定义了一些绘图参数(res)。
然后,使用gsn_csm_xy函数绘制了一条简单的曲线图,并使用gsn_panel和gsn_frame函数将图形保存到文件中。
2.绘制等值线图```beginwks = gsn_open_wks("png", "contour_plot")res = Truedata = (/(/1, 2, 3, 4, 5/), (/6, 7, 8, 9, 10/), (/11, 12, 13, 14, 15/), (/16, 17, 18, 19, 20/), (/21, 22, 23, 24, 25/)/) plot = gsn_csm_contour(wks, data, res)gsn_panel(wks, plot)gsn_frame(wks)end```上面的代码中,我们定义了一个二维数组data,并创建了一个包含5个等级的等值线图。
NCL Polymarker类型1. 简介NCL(NCAR Command Language)是一种用于科学数据分析和可视化的编程语言,是NCAR(National Center for Atmospheric Research)开发的一种专业工具。
在NCL中,Polymarker是绘图函数的一种类型,用于创建多个不同样式的点标记。
2. Polymarker类型的属性Polymarker类型具有以下属性:- 符号样式:可以选择不同样式的点标记,包括圆圈、方块、星形等。
- 大小:可以设置点标记的大小。
- 颜色:可以设置点标记的颜色。
3. Polymarker类型的用法示例以下是使用NCL Polymarker类型的简单示例:```nclbeginwks = gsn_open_wks("x11","plot")x = (/1, 2, 3, 4, 5/)y = (/5, 4, 3, 2, 1/)res = TrueresgsMarkerIndex = 16 ; 设置标记类型为圆圈resgsMarkerSizeF = 0.03 ; 设置标记大小resgsMarkerColor = "blue" ; 设置标记颜色plot = gsn_point(wks, x, y, res)end```4. Polymarker类型的应用Polymarker类型广泛应用于科学数据可视化领域,特别适用于散点图和地图中的点标记。
通过设置不同的符号样式、大小和颜色,可以使数据图表更加清晰易读。
5. 总结NCL Polymarker类型是NCL中用于绘制多个不同样式的点标记的一种类型,具有灵活的属性设置和广泛的应用领域。
通过合理地运用Polymarker类型,可以有效地展示科学数据,提高数据可视化的质量和效果。
对于NCL(NCAR Command Language)的Polymarker 类型而言,它是科学数据可视化中不可或缺的一部分。
2021.07科学技术创新NCL 语言中图形绘制基本概念辨析李玉鹏1,2李吉3,4*高梦竹5曲骅倩6(1、长白山气象与气候变化吉林省重点实验室,吉林长春1300622、吉林省气象科学研究所,吉林长春1300623、伊通满族自治县气象局,吉林四平1307004、成都信息工程大学,四川成都6102005、黑龙江省气象台,黑龙江哈尔滨1500016、桓仁满族自治县气象局,辽宁本溪117200)NCL 是一种专门为大气科学专业数据处理以及图形绘制而开发的编程语言,其在气象领域的应用在国内外十分广泛[1,2]。
NCL 支持丰富的数据类型,如NetCDF 3/4、GRIB 1/2、HDF 4/5、HDF-EOS 2/5、shapefile 、ASCII 以及二进制文件,而且对数据接口进行了封装,使得读取不同数据格式都十分方便。
NCL 有令人喜爱的数据可视化能力,默认参数下输出的图形质量已经十分出色,国内外众多气象相关的期刊上的图形很多都由NCL 绘制。
除了在图形绘制方面的优势外,NCL 还内建了许多气象专业常用的公式和函数,可以方便使用者直接调用,另外,NCL 支持众多的投影和网格类型,因此也可以对众多模式结果进行后处理和可视化[3,4]。
NCL 虽然有着优秀的数据处理和高品质图形绘制能力,但其语言设计方面和Matlab 、Grads 等其他气象常用编程语言有着较大的差异,其特有的以@为标志的面向对象的属性设置更让众多初学者都感到不适。
而在数据可视过程中,draw 、frame 、gsnDraw 、gsnFrame 这几个语句是十分重要也是十分常见的,但往往不易理解。
因此本文主要对以上这些语句以及背景概念进行详细分析。
1理解draw 与frame 过程下面来详细地分析draw 和frame 的区别。
首先draw (plot ),括号内还可以是数组,这个“过程”即procedure ,相当于执行“绘制”,绘制不是直接地绘制到png 、pdf 等图形中,而是绘制在workstation 中,这一过程就像执行了一个动作,当然这个动作的对象必须是view object (可理解为图形对象),view object 可以通过gsn 方式或者create 方式产生。
Example 1——XY plots这个例子介绍了NCL的基础知识,例如如何开始和结束NCL脚本,如何创建和初始化变量,如何创建和绘制XY坐标图,以及如何设置resources来改变XY坐标图的外观。
此外还介绍了NCL变量包含元数据的概念,以及展示了如何从ASCII文件读取数据。
这个例子创建了5个XY坐标图。
前四个图使用了NCL脚本生成的数据,第五个图读取了ASCII文件的数据。
第一个图有一个曲线,其他图右多条曲线。
每个图相对前一个图来讲都有一些改动的地方,例如添加标题、线标签,改变线条颜色和粗细,添加标记。
在以后的例子中将有更加复杂的XY坐标图。
请注意,“line”和“curve”在这个示例中互换使用,用来表示XY坐标图的曲线。
分号“;”在NCL脚本中表示允许注释。
所有的注释都必须以分号开头,任何在分号之后和下一个换行符前的东西都将忽略。
注释可以在一行中单独出现,也可以出现在NCL命令之后。
但是在同一行注释不能出现在命令之前,因为注释符之后所有的东西都被忽略。
运行这个示例,必须下载以下文件:gsun01n.ncl,然后键入:ncl gsun01n.ncl 示例1代码及解释1. load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" ; Load the NCL file that contains the gsn_*载入本示例使用的包含函数和程序(以gsn开头的)的NCL脚本。
NCL中的load语句的作用和C和Fortran90程序中include作用一样。
2.; functions used below.3. begin每个NCL脚本都以begin声明开始,以end声明结束。
4. x = new(9,float) ; Define two 1D arrays of 9 elements each.5. y = new(9,float)用new语句来声明2个各有9个元素的1维浮点数组。
new语句的第一个参数表明变量的维度,第二个参数表明类型。
在这里,这两个new语句是多余的,因为在NCL中你可以通过初始化它们来声明变量(就如下两行所示)。
所有有关NCL变量类型的内容,请参见NCL Reference的“NCL data typesoverview”。
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") ; Open an X11 workstation.要NCL生成图形,就需要告诉它哪里绘制图形。
选择也就是熟知的工作站,是一个X11窗口,一个NCAR图形图元文件(NCGM),或者是PostScript文件(正常、包覆或者包覆交换regular,encapsulated or encapsulated interchange)。
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) ; Draw an XY plot with 1 curve.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. ;----------- Begin second plot -----------------------------------------在代码中分开,来表示进入第二个图的代码。
绘制带有三条曲线的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" ; D efine a ttributes of x21. y2@long_name = "Y" ; a nd y2.NCL变量比传统程序语言如C和Fortran中使用的变量更一般。
通常,他们包含值,但它们也可能包含这个变量的辅助信息。
这种额外的信息通常被称为“元数据”。
元数据被分成三种类型:属性、命名的维和坐标变量(attributes,named dimensions和coordinate variables)。
可以给变量分配无限量的属性数目,每个分配给变量的属性都会使用“@”符号。
在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) ; Draw an XY plot with 3 curves.绘制一个新的坐标图,使用与第一个图形相同的X数组,和刚定义的新的y2数组。
因为X只是一个一维的数组,NCL将x数组的值和y2数组中三条曲线的值进行配对。
如果在3×9的Y数组以外还声明了一个3×9的X数组,那么Y数组中的每个值都会和相对应的X数组的每个值对应。
请注意,如果是在一个XY坐标图中绘制超过一条曲线的话,那么gsn_xy 会用独特的虚线类型来绘制每条曲线。
共有16种不同的虚线类型,在图形文件中查看“dash patterns”列表。
注意到由于属性“long_name”而出现的新的X和Y轴标签。
24.25. ;----------- Begin third plot -----------------------------------------画出相同的三条曲线,但每条曲线有不同的颜色和粗细。
26.27. resources = True ; Indicate you want to28. ; set some resources.这一行引入了“resources”的概念来改变坐标图的外观。
在NCL,有上百个resources,你可以用来改变线条颜色和粗细,添加标题、改变字体、创建标签和图例、改变地图投影、改变坐标图大小、屏蔽某些区域等等。
同样还有一些resources可以用来改变坐标图的数据,例如设置最小值、最大值,选择数据的子集,或者设置缺失值等。
大多数resources有默认值,当你运行NCL脚本的时候通过NCL自动设置的。
例如,曲线的粗细的hard-coded值是1.0,但是一条曲线的最大和最小值是根据XY坐标图中用到的最大值和最小值自动设置的。
如果你想要改变默认值的话,你只有设置一个resource。
Resources通过他们的图形对象的类型或者表述的数据类型进行分类,这些分组在这里或其他示例中讲进行讨论。
为gsn_*组别的函数设置resources,首先定义逻辑类型的变量并将其值设为True,然后制定这个逻辑变量的resources。
如上所述,一个变量可以有无数个属性。
你创建的这个属性需要通过为resources设置适当的gsn_*plotting routine,使其有效。