contours over map这是示例展示了如何创建一个NCL函数使用内置进_第1页
contours over map这是示例展示了如何创建一个NCL函数使用内置进_第2页
contours over map这是示例展示了如何创建一个NCL函数使用内置进_第3页
contours over map这是示例展示了如何创建一个NCL函数使用内置进_第4页
contours over map这是示例展示了如何创建一个NCL函数使用内置进_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Exmaple9——animatedcontoursoveraNCLNCL内置函数进行平均和隐蔽,如何在图形创建之后设置resources12帧的等值线动画。这是示例使用了非常丰富的resouce文件。这个示例从netCDF文件中数据,并且创建了一个12帧的极地立体地图投影的等值线动画。这是示例使用了resource文件并且展示了如何在NCL脚运行这个示例,必须以下文件:gsun09n.ncl、gusn09n.res,然后键入:nclgsun09n.ncl。示例9代码及解loadfunctionNCL函数和程序。NCL里的函数和程序是一样的,只有一点不同就是函数返回一个值。在NCL里,函数或者程序的代码必须在它NCLfunctionname_of_function(arg1:type,arg2:type,...)locallocal_var1,local_var2,.....procedurename_of_procedure(arg1:type,arg2:type,...)locallocal_var1,local_var2,.....NCLReferenceManual中的“NCLstatementsNCL3-26行定义了一个名叫addcyclic的函数。它把任何大小(通过语句[*][*]表明)的二维float数组作为输入,然后范围一个ny×mx+1的二维float数组,ny×mx是data的维度。Addcyclic了data的每一个元素到输出数组(在该示例中叫做newdata,然后data(i,0)到newdata(i,mx),i从0到ny-1。;;Addacyclicpointin"x"toa2D;foralat/lonplot correspondsto "ny"correspondsto "mx"correspondstolocaldims,newdata,ny,mx,使用local语句来列出本地变量到函数。这并不是必要的,但是强烈建议这NCLReferenceManual中的“NCLstatements以beginNCLend = = = =data的维数大小到本地变量再到addcyclic函数。newdata= newdata(:,0:mx-1)= ;pass =(/data(:,0) ;value创建输出数组newdatadata有一样个数的维度,但是在第二个维度中有多出的一个元素。然后,将data的每一个元素到newdata中,然后复制data(i,0)到newdata(i,mx),i从0到ny-1。请注意用以下两行data的不newdata(:,0:mx-1)=data =(/data(:,0)/)在第一行,data中的每一个元素都到newdata中作为一个自己,包了data的metadata,如果存在的话。在第二行中,通过用“and”来包围data(:,0),只有data(:,0)的数值被,而没有任何的metadata。这样做是为了加快一下速度,因为metadata已经过了。if((.not.ismissing(newdata!1)).and.iscoord(data,newdata!1))newdata&$newdata!1$(mx)=newdata&$newdata!1$(0)+end命令.not.ismissing(newdata!1)newdata(newdata!1)的第二个维度是否有名字。如果有的话,那么iscoord(data,newdata!1)来验证这个名字是不是data的坐标变量。如果是的话,那么addcyclic函数假设这是个经度数据,然后对这个坐标变量的的0-th元素加上360.0,然后降档到newdata的坐标变量中的第mx个元素。查阅示例4,有关语法$newdata!1$的信息返回一个二维数组newdata(metadata同时被返回结束addcyclic开始NCL的主程序file1=ncargpath("data")+ice1=fice=ice1- ;Readfice--icehlat=ice1-hlon=ice1-打开netCDF文件“file.nc,然后冰浓度数据,同时冰浓度数据测量的值。在10年中的每个月,冰浓度数据在同样的网格测量。fice是一个三维数组包括了坐标变量time、hlat和hlon。dimf=dimsizes(fice);Defineanarraytoholdlong-termmonthly = = = =new((/nhlat,nhlon/),float,-将fice的维度大小到本地NCL变量中,创建一个新的2为float数据icemon,维度为nhlat×nhlon。new的第三个参数(可选)为缺省值设置了值, = ;Namedimensions0and = ;oficemonandicemon&hlat= ;coordinatevariablesforicemon&hlon=命名icemon;CalculatetheJanuary(nmo=0) = =icemon=dim_avg(fice(hlat|:,hlon|:,time|nmo:ntime-0到n-2个维度的每个index(ndim_avg的数组的维度的个,NCL照hlat×hlon×time重新排列,所以在上述dim_avg101的冰浓度值进行了平均(语法nmo:ntime-1:12选择了时间步长[0,12,24,...108],icemon=mask(icemon,icemon.eq.0., ;Set0.0to(icemon,当第二个参数等于第三个参数的时候(Falsemask值时(第三个参数NCLReferenceManual中关于mask说明,有关于该函数是如何工作的例子。在上述mask语句中,如果icemon0999.0nsub=16;Subscriptlocationofnorthernmosthlattobewks=gsn_open_wks("ncgm","gsun09n");OpenanNCGMNCGM文件,可以使用idt来这个动画。很多的公共工具都可以用来将多NCFMweb使用的动画的mpeg或gif文件。cmap=(/(/1.00,1.00,1.00/),(/0.00,0.00,0.00/),(/1.00,1.00,0.50/), (/0.00,0.00,0.50/),(/0.50,1.00,1.00/),(/0.50,0.00,0.00/), (/1.00,0.00,1.00/),(/0.00,1.00,1.00/),(/1.00,1.00,0.00/), (/0.00,0.00,1.00/),(/0.00,1.00,0.00/),(/1.00,0.00,0.00/), (/0.50,0.00,1.00/),(/1.00,0.50,0.00/),(/0.00,0.50,1.00/), (/0.50,1.00,0.00/),(/0.50,0.00,0.50/),(/0.50,1.00,0.50/), (/1.00,0.50,1.00/),(/0.00,0.50,0.00/),(/0.50,0.50,1.00/), (/1.00,0.00,0.50/),(/0.50,0.50,0.00/),(/0.00,0.50,0.50/), (/1.00,0.50,0.50/),(/0.00,1.00,0.50/),(/0.50,0.50,0.50/), gsn_define_colormap(wks,cmap);Defineacolor resources= icemonnew=使用上述定义的函数addcyclic,添加“cyclic”点到icemon,然后调用新的数组icemonnew。resources@sfXArray= ;Necessaryforoverlayon

resources@sfYArray=resources@tiMainString="CSMY00-99MeanIceFractionMonth="map=gsn_contour_map(wks,icemonnew,resources);Drawa;overa为10每个1月的平均冰浓度创建等值线图。请注意为这个等值线图并没有设置很多的resources。这是因为绝大多数的resources已经放在了resource文件“gsun09n.res”中(请注意,输入到gsn_open_wks的第二个字符串决定了resources文件的名字。只有不需要以编程方式设置的resouces能够放置在resource文件中。例如,在NCL中的80行中,可以用一下的字符串设置tiMainStringresources@tiMainString="CSMY00-99MeanIceFractionMonth="+NCL变量month的值才能完成。因为resources文件没有办法知道NCL变量,任何需要NCL变量的resouces都必须在NCL中设Resource文件在“Resourcefilesnmos=donmo=1,nmos- =icemon=dim_avg(fice(hlat|:,hlon|:,time|nmo:ntime-的冰浓度值创建图形。所有为原始图像设置的resources都保持一致,除了标题icemon=mask(icemon,icemon.eq.0., ;set0.0to如果icemon0setvaluesmap@contour;Changethetitleforthecontour"tiMainString":"CSMY00-99MeanIceFractionMonth="+endsetvaluesblockstatementsetvalues块语句允许你在已经创建好的图像上改变resourcessetvalues,你可以通过对draw的调用来绘制新的图像。这比改变resources然后在调用gsn_*绘制函数来得有效的多,因为gsn_*绘制函数假设你是从无到有在创建一个图形,它会所有在NCL中设置的resources,而不仅仅是改变过的那些。Setvalues4中讨论的getvalues块语句类似。它有一个开始语句(setvalueplotid)和一个结束语句(endsetvalues。在块内,有一个想要对个别图形进行改变设置的resources的列表,对每个resouce名字引号引起来,然后接着一个分号“resouce的新值。变量plotid来自调用gsn_*绘制程序的返回。对于getvalues,你必须确定应用到个别图形而设置的resouces,在setvaluesgsn_vector来创建一个矢量图,那么你不能用gsn_vector返回的变量来设置等值线图resoucecnFillOn。91行设置的resource是tiMainString,因此问题在于,究竟是哪个图形要应用这个resouces,是地图或是等值线图呢?答案是,如果你已经分别创建了这些图,tiMainString会应用至任何一个图。但是,因为你正在地图上),tiMainString5中所提,gsn_contour_map该函数以函数值返回地图,以地图“contour性返回等值线图。为等值线图设置tiMainString,使用map@contour作为setvalues ;Changethedataforthecontour"sfDataArray":end另外一个需要改变的resource是data。至于这一点,data还没有作为一个resource谈论过。这是因为gsn_*已经考虑到这个“幕后”事实。调用gsn_contour或者gsn_xy来创建等值线或者XY坐标图,当你将数据传递到这些函数是,一个“dataobject”就创建了,而且它还有字记得resources,就像是等XY坐标图。一些resources你已经看见,如ScalarField或者VectorFieldresources。得到创建的dataobject分配了一个图形类型的变量。这个变量用做获取数据(等值线图、XY坐标图、矢量图或者是流线图)的图形的一个resouce值。既然数据已经通过resource传递到图形,这就意味着如果你已经用袁术数么你就可以通过使用setvalues来改变原始图的数据。同样的道理,坐标图作为地图的一个属性而得到返回,dataobject作为地图的“data”属性返回。保持二维标量场的resourcesfDataArray。在同一步内分配新的数据,你也可以调用函数addcyclic是数据进行循环。 ;Drawthecontourframe(wks);Advancethe现在已经改变了数据和原始图中使用的标题,用draw绘制新图,用90-99resources@tiMainString="CSM

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论