您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > IDL入门教程二(下)(简单图形显示I)
从IDL5版本开始,Contour命令一般都使用单元跟踪法来绘制等值线图。所以,Follow关键字已经过时了。但该关键字仍然被使用,是因为它对自动标注其它每条等值线的有益作用。选择等值线数目缺省情况下,IDL选择6条匀称的等值线间隔(即有5条等值线)绘制等值线图。但是,可以用几种不同的方法改变缺省值。例如,可以用Nlevels关键字告诉IDL需要绘制多少条等值线。IDL将计算出等间隔的等值线间隔数。例如,要绘制具有12条等间隔的等值线图,可键入:IDL>Contour,peak,lon,lat,Xstyle=1,Ystyle=1,/Follow,$Nlevels=12输出结果应与图18相似。可选择高达29条的等值线。图18:这是将等值线级别设置为12的等值线图。注意,每隔一条等值线都会标注一条,这是使用Fellow关键字的一种副作用。不幸的是,尽管IDL文档称IDL将采用给定的等间隔的等值线间隔数,但事实上不是这样。如果注意观察所创建的等值线图,会注意到IDL只计算出少于12条的间隔线。显然,NLevels关键字的值在IDL中只能作为等值线选择算法中的一个“建议”。因此,大多数IDL程序员都是自己计算等值线数目。例如,能精确规定哪条等值线应该画,并用Levels关键字传给Contour命令,而不是用NLevels关键字,如下所示:IDLvals=[200,300,600,750,800,900,1200,1500]IDLContour,peak,lon,lat,XStyle=1,YStyle=1,/Follow,$Levels=vals要选择12个间距相等的等值线间隔,可编写如下代码:IDLnlevels=12IDLstep=(Max(peak)-Min(peak))/nlevelsIDLvals=Indgen(nlevels)*step+Min(peak)IDLContour,peak,lon,lat,XStyle=1,YStyle=1,/Follow,$Levels=vals如果喜欢,可以C_Labels关键字精确的指定哪一根等值线应该标注。这个关键字是一个其元素与等值线数目相等的矢量(如果元素个数与等值线数目不匹配,那么元素就不能象其它关键字那样循环使用)。如果某元素的值是1(或更精确,只要是正数),相应的等值线就给予标注;如果某元素的值是0,相应的等值线就不予标注。如果某条等值线没有元素值与之对应时,那么这条等值线就不标注。例如,要标注第一,第三,第六和第七条等值线,可键入:IDLContour,peak,lon,lat,XStyle=1,YStyle=1,/Follow,$Levels=vals,C_Labels=[1,0,1,0,0,1,1,0]要标注所有的等值线,可以使用Replicate命令来将1复制所需要的次数。键入:IDLContour,peak,lon,lat,XStyle=1,YStyle=1,/Follow,$Levels=vals,C_Labels=Replicate(1,nlevels)修改等值线图等值线图可用与Plot命令和Surface命令中相同的关键字进行修改。但是仍然还有许多仅适用于Contour命令的关键字。它们中的大部分经常用于修改等值线本身。例如,用坐标轴标题注释等值线图,可键入:IDLcontour,peak,lon,lat,Xstyle=1,Ystyle=1,/Follow,Xtitle=’Longitude’,Ytitle=’Latitude’,$Charsize=1.5,Title=’StudyArea13F89’,Nlevels=10也可以用C_Annotation关键字在等值线上标注释。可以用字符串标记每一条等值线:IDLcontour,peak,Xstyle=1,Ystyle=1,/Follow,$Xtitle=’Longitude’,Ytitle=’Latitude’,Charsize=1.5,Title=’StudyArea13F89’,$C_annotation=[‘Low’,’Middle’,’High’],Levels=[200,500,800]输出结果应与图19中的图例相似。图19:等值线可以用自己提供的文本标识改变等值线图的外观修改等值线图的外观有许多方法。这里有一些例子。能改变的特性之一是等值线的线型(见表3列出的可选用的线型值)。例如,为了使等值线成为虚线的线型,键入:IDLContour,peak,lon,lat,Xstyle=1,Ystyle=1,$/Follow,C_LineStyle=2假如需要隔二条等值线有一条虚线,可以用C_LineStyle关键字指定一个线型索引矢量,假如等值线数比索引号多,那么这些索引号将被循环使用或被重复使用。键入:IDLcontour,peak,lon,lat,XStyle=1,Ystyle=1,/Follow,$Nlevels=9,C_LineStyle=[0,0,2]输出结果应与图20相似.图20:可以修改等值线图的许多方面。这是隔二条等值线有一条虚线的等值线图。可以改变等值线的宽度。例如,要使等值线具有双倍的宽度,可键入:IDLContour,peak,lon,lat,Xstyle=1,Ystyle=1,$Nlevels=12,C_Thick=2,/Follow通过指定一个线宽矢量,可以间隔修改等值线的宽度:IDLContour,peak,lon,lat,Xstyle=1,Ystyle=1,$Nlevels=12,C_Thick=[1,2],/Follow通过修改等值线图,可以很容易地看到等值线图的下坡方向。键入:IDLContour,peak,lon,lat,Xstyle=1,Ystyle=1,$/Follow,Nlevels=12,/Downhill输出结果应与图21相似。图21:用Downhill来显示等值线图的下坡方向。给等值线图赋色给等值线图着色的方法有许多种。(颜色将在第83页的“IDL的颜色运用”中详细讨论。现在,只须按如下键入TvLCT命令即可,以后将学到这个命令意味着什么。实质上,装载了三个颜色矢量,每个矢量的三个分量分别代表颜色的三个组成部分红,绿,蓝。这三种颜色矢量为碳灰,黄,绿色。)假如需要一张以碳灰颜色为背景的黄色等值线图,可键入:IDLTvLCT,[70,255],[70,255],[70,0],1IDLContour,peak,lon,lat,XStyle=1,YStyle=1,$NLevels=10,Color=2,Background=1,/Follow也可以用C_Color关键字给等值线本身单独添上颜色。如果需要将上图的等值线变为绿色,键入:IDLTvLCT,0,255,0,3IDLContour,peak,lon,lat,Xstyle=1,Ystyle=1,/Follow,$Nlevels=10,Color=2,Background=1,C_Colors=3关键字C_Color也可以被表达为色彩表索引号的矢量,并以循环的方式绘制等值线。也可以使用Tek_Color命令为等值线创建或者装入颜色,如下:IDLTek_ColorIDLTvLCT,[70,255],[70,255],[70,0],1IDLContour,peak,lon,lat,XStyle=1,YStyle=1,$Nlevels=10,Color=2,Background=1,$C_Colors=IndGen(10)+2,/Follow可以很容易地用C_Colors关键字使每间隔二条等值线有一条蓝色的等值线,其余的等值线为绿色。键入:IDLContour,peak,lon,lat,Xstyle=1,Ystyle=1,$NLevels=12,Color=2,Background=1,$C_Colors=[3,3,4],/Follow创建填充的等值线图有时,不只是想观察等值线,也想看看填充后的等值线图。创建一张填充的等值线图,只需使用关键字Fill即可。首先,装入12种颜色于色彩表中作为填充颜色。色彩索引号由关键字C_Colors给出。键入:IDLLoadCT,0IDLLoadCT,4,Ncolors=12,Bottom=1IDLContour,peak,lon,lat,Xstyle=1,Ystyle=1,/Fill,$NLevels=12,/Follow,C_Colors=Indgen(12)+1用这种方法填充颜色还是存在许多问题,尽管从显示看不是很明显。事实上,在等值线图有一个以背景颜色填充的”洞”。假如将背景色与图形颜色交换一下,就可以看得更清楚一些(事实上,PostScript中就是这样做的。这也是致使许多IDL程序人员焦头烂额的原因)。IDLContour,peak,lon,lat,Xstyle=1,Ystyle=1,/Fill,$NLevels=12,/Follow,C_Colors=Indgen(12)+1,$Background=!P.Color,Color=!P.Background“洞”产生的原因是由于IDL用第一种颜色填充了第一和第二条等值线间的空间。用第一种填充颜色去填充第零条(或背景)和第一条等值线之间的空间似乎更合理。但是,要使IDL这样做,不得不给定自己的等值线数目,并用关键字Levels传送给Contour命令。通常可用下述代码实现:IDLstep=(Max(peak)–Min(peak))/12.0IDLclevels=IndGen(12)*step+Min(peak)现在,就得到了正确的等值线填充颜色。IDLContour,peak,lon,lat,Xstyle=1,Ystyle=1,/Fill,$Levels=clevels,/Follow,C_Colors=Indgen(12)+1,$Background=!P.Color,Color=!P.Background通常情况下,在填充等值线图时,经常定义等值线数目不失为一种好的方法。此外,要将填充的等值线图和色彩棒一起显示时,那么,创建自己的等值线数目是确保等值线数目与色彩棒的级数一致的唯一方法。有时候,需要填充有丢失数据的等值线图或者是等值线超出了图形边界的等值线图,这种情况称为“开放的等值线”。IDL处理这些开放的等值线时有时比较困难。填充这类等值线图的最好办法是使用关键字Cell_Fill,而不是使用Fill关键字。这将导致Contour命令使用单元填充算法。这种算法没有Fill关键字使用的算法效率高,但在这种情况下可以获得更好的填充效果。假如需要将填充的等值线图放在地图投影上,使用Cell_Fill关键字也是个好主意。IDLContour,peak,lon,lat,Xstyle=1,Ystyle=1,$Levels=clevels,C_Colors=Indgen(12)+1,/Cell_Fill单元填充算法有时会破坏等值线图的坐标轴。可以通过不带数据的等值线图的重新绘制来修复。键入:IDLContour,peak,lon,lat,Xstyle=1,Ystyle=1,$Levels=clevels,/NoData,/NoErase,/Follow有时,可能想在已填充好颜色的等值线图上看到等值线。在IDL中用Overplot关键字可以轻而易举地实现。键入:IDLContour,peak,lon,lat,Xstyle=1,Ystyle=1,$Levels=clevels,/Fill,C_Colors=IndGen(12)+1IDLContour,peak,lon,lat,Xstyle=1,Ystyle=1,/Follow,$Levels=clevels,/overplot输出结果应与图22相似图22:在已填充的等值线图上覆盖等值线注意,不要混淆Overplot和NoErase关键字。它们是相似的,但确切地说是不一样的。在等值线图上,Overplo
本文标题:IDL入门教程二(下)(简单图形显示I)
链接地址:https://www.777doc.com/doc-2876984 .html