IDL入门教程二(下)(简单图形显示I)(2)

2019-04-14 21:15

C_Colors=IndGen(10)+2, /Follow

可以很容易地用C_Colors关键字使每间隔二条等值线有一条蓝色的等值线,其余的等值线为绿色。键入:

IDL> Contour, peak, lon, lat, Xstyle=1, Ystyle=1, $ NLevels=12, Color=2, Background=1, $ C_Colors=[3, 3, 4], /Follow

创建填充的等值线图

有时,不只是想观察等值线,也想看看填充后的等值线图。创建一张填充的等值线图,只需使用关键字Fill即可。首先,装入12种颜色于色彩表中作为填充颜色。色彩索引号由关键字C_Colors给出。键入: IDL> LoadCT, 0

IDL> LoadCT, 4, Ncolors=12, Bottom=1

IDL> Contour, peak, lon, lat, Xstyle=1, Ystyle=1, /Fill, $ NLevels=12, /Follow, C_Colors=Indgen(12)+1

用这种方法填充颜色还是存在许多问题,尽管从显示看不是很明显。事实上,在等值线图有一个以背景颜色填充的”洞”。假如将背景色与图形颜色交换一下,就可以看得更清楚一些(事实上,PostScript中就是这样做的。这也是致使许多IDL程序人员焦头烂额的原因)。 IDL> Contour, 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命令。通常可用下述代码实现:

IDL> step = (Max(peak) – Min(peak)) / 12.0 IDL> clevels = IndGen(12)*step + Min (peak)

现在,就得到了正确的等值线填充颜色。

IDL> Contour, 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关键字也是个好主意。

IDL> Contour, peak, lon, lat, Xstyle=1, Ystyle=1, $ Levels=clevels, C_Colors=Indgen(12)+1, /Cell_Fill

单元填充算法有时会破坏等值线图的坐标轴。可以通过不带数据的等值线图的重新绘制来修复。键入:

IDL> Contour, peak, lon, lat, Xstyle=1, Ystyle=1, $ Levels=clevels, /NoData, /NoErase, /Follow

有时,可能想在已填充好颜色的等值线图上看到等值线。在IDL中用Overplot关键字可以轻而易举地实现。键入:

IDL> Contour, peak, lon, lat, Xstyle=1, Ystyle=1, $ Levels=clevels, /Fill, C_Colors=IndGen(12)+1

IDL> Contour, peak, lon, lat, Xstyle=1, Ystyle=1, /Follow, $ Levels=clevels, /overplot

输出结果应与图22相似

图22:在已填充的等值线图上覆盖等值线

注意,不要混淆Overplot和NoErase关键字。它们是相似的,但确切地说是不一样的。在等值线图上,Overplot关键字仅仅绘出等值线,而不绘出等值线图的坐标轴。 NoErase关键字则是绘出完整的等值线图,而不删除在屏幕上已显示的内容。

在显示窗口定位图形输出

IDL有几种在显示窗口中定位线画图、曲面图、等值线图和其它图形的方法(比如地图投影)。为了理解IDL怎样定位图形,了解一些定义很重要。图形位置是指在显示窗口上被图的坐标轴框起来的部分中的位置。图形位置不包括坐标轴标识,坐标轴标题或者其它注释(见下面的图23)。图形区域是显示窗口的一部分,包括图形位置,也包括环绕图形位置的空间,用来注明坐标轴标识,坐标轴标题和图标题等。图形边界定义为在显示窗口内不包括图形位置的区域。

图形位置可以用!P.Position系统变量设置,或者用Position关键字对Plot, Surface, Contour或其它IDL图形命令进行设置。整个图形区域可用!P.Region系统变量设置,或者通过!X, !Y和!Z系统变量的Region字段来设置单个坐标轴的区域。图形边界可以用[XYZ]Margin关键字来对Plot, Surface, Contour或IDL的其它图形命令进行设置,或者通过!X, !Y和!Z系统变量的Margin字段来设置。

在缺省值情况下,IDL是在将图形输出到显示窗口的时候设置图形边界的。但是,正如所看到的,这并不是最好的选择。有时,使用图形定位来定位图形显示会更好,尤其是,当在一个显示窗口中显示多个命令的输出结果时。 10 5 0 0 20 40 80 图形位置 10 5 0 0 20 40 80 图形区域 10 5 0 0 20 40 80 图形边缘 图23: 图形位置是被坐标轴包围起来的区域。图形区域与图形位置类似,但它还包括图形标题和其它注释的区域。图形边缘正好与图形位置相反。图形边缘由字符的单位确定,而

图形位置和图形区域是由归一化的坐标单位确定。

设置图形边缘

图形边缘可以用图形命令中的[XYZ]Margin关键字设置,或者通过!X,!Y和 !Z系统变量的Margin字段来设置。关于图形边缘的特殊地方在于根据字符尺寸来确定的单位。X方向的边缘是用两元素矢量来设置的,这两个元素分别规定左右的偏移量。Y方向的边缘用同样的方法确定底部和顶部的偏移量。缺省边缘值是X轴方向为10和3,Y轴方向为4和2。为了查看当前字符尺寸的设备坐标值或像素坐标值,可键入: IDL> Print, !D.X_Ch_Size, !D.Y_Ch_Size

例如,在苹果机(Macintosh)中,缺省的字符尺寸在X方向上为6个像素,在Y方向上为9个像素。因此,一张等值线图的边缘就被确定为图形的左边为60个像素(6*10),右边为18个像素(6*3)。如果CharacterSize关键字在 Contour命令中设置为2,那么将会出现图形的左边边缘为120个像素,而图形的右边边缘为36个像素。 例如,为了将图形四周边缘都改变为3个缺省的字符宽度,可键入: IDL> Plot, time, curve, Xmargin=[3, 3], Ymargin=[3, 3]

注意,如果同时改变字符尺寸,图形将出现非常大的差异。因为图形边界是由字符的尺寸确定的。键入:

IDL> !X. Margin = [3, 3] IDL> !Y. Margin = [3, 3]

IDL> Contour, peak, CharacterSize=2.5 IDL. Contour, peak, CharacterSize=1.5

假如用其它的字符尺寸来做一些同样的操作,会发现,字符尺寸越大,字符将变得很大并且图形部分将变得很小,这并不是所希望看到的。当向下继续学习时,请确保将图形边界已恢复为缺省值。键入: IDL> !X.Margin = [10, 3] IDL> !Y.Margin = [4, 2]

注意,不象许多其它系统变量通过将其设置为零即可恢复其缺省值那样,系统边缘变量则必须直接将其设置为缺省值。假如没有键入以上的两条命令,现在就键入。

设置图形位置

设置图形位置需要设置一个四个元素的矢量,该矢量依次给定图形在显示窗口中的左下角和右上角坐标[X0,Y0,X1,Y1]。这些坐标值通常为归一化的值,其范围在0至1之间(如:0常常代表显示窗口的左边或者底部,1常常代表显示窗口的右边或者顶部。) 设想需要将图形输出结果在显示窗口的上半部分显示,可以按如下设置!P.Position系统变量并显示图形:

IDL> !P.Position = [0.1, 0.5, 0.9, 0.9] IDL> Plot, time, curve

所有后面的图形输出定位方法都是类似的。将!P.Position系统变量复位,以便后面的

图形输出能正常地显示在窗口中。键入: IDL> !p.position = 0

假如仅想给一张图形显示定位,可以用图形命令的Position关键字规定一个图形位置。如果要在整个显示窗口的左半部分显示等值线图,可以键入: IDL> Contour, peak, Position=[0.1, 0.1, 0.5, 0.9]

注意,Position关键字可以用来在相同的显示窗口输入多幅图形。只要确保在输入第二幅图形和所有的后续图形时,使用NoErase关键字。这可防止在显示图形时删除前面已显示的图形。对于所有的图形输出命令来说,这是一项缺省特性,但是TV和TVScl命令是例外。

在一张等值线图上加入一条线图,可键入:

IDL> Plot, time, curve, Position=[0.1, 0.55, 0.95, 0.95]

IDL> Contour, peak, Position=[0.1, 0.1, 0.95, 0.45], /NoErase

设置图形区域

图形区域与图形位置一样,都是由归一化坐标值来确定的。同样可以通过设置!P.Region系统变量来指定。由于不存在和其它图形命令等效的关键字,因此设置图形区域没有设置图形位置方便。如果希望后续图形能正常地使用整个显示窗口,应确保已经将系统变量复位了。例如,在显示窗口上方三分之二的部分区域中显示一幅图形,键入: IDL> !P.Region = [0.1, 0.33, 0.9, 0.9] IDL> Plot, time, curve

将!P.Region系统变量复位,以便后续图形能正常地在窗口内显示。键入: IDL> !P,Region = 0

创建多个图形

正如所见,通过使用图形位置和图形区域系统变量以及上面所讨论的关键字可以在一个显示窗口中定位多个图形(只要绘制第二个和后续的图形时使用了NoErase关键字)。但是使用!P.Multi系统变量在显示窗口内创建多个图形更加容易。!P.Multi由以下五个元素的矢量定义。

!P.Multi[0] !P.Multi的第一个元素包括剩下的要在显示窗口或者PostScript页上绘

制的图形数目。这有点不直观,以下就可以看到它是如何使用的。通常设置为0,意思是,没有剩下要在显示窗口输出的图形。接下来的图形命令将删除显示的图形,并且开始绘制新的多个图形中的第一个。

!P.Multi[1] 此元素规定了该页上图形的列数

!P.Multi[2] 此元素规定了该页上图形的行数


IDL入门教程二(下)(简单图形显示I)(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中班美术教案:五彩鸟(共4篇)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: