admin管理员组文章数量:1532440
2024年5月17日发(作者:)
第二章 简单的图形显示
本章概述
科学分析最基本的能力就是以简单的线画图、等值线图和曲面图来显示所研究的数据。
在这一章中,将知道用这些方式来显示数据是多么容易。也将学会用系统变量和关键字来
定位和标注简单的图形显示。
将学会如下几点:
1. 如何用Plot命令将数据显示为线画图。
2. 如何用Surface和Shade_Surf命令将数据显示为曲面图。
3. 如何用Contour命令将数据显示为等值线图。
4. 如何在显示窗口上定位显示图形。
5. 如何用公共关键字来标注和自定义图形显示。
IDL中简单的图形显示
IDL中一个简单的图形显示可认为是栅格图形的一个实例。也就是说,可用Plot,
Contour或者Surface命令通过一种算法来点亮显示窗口内相应的像素点而形成栅格图形。
这种栅格图形没有永久性。换言之,一旦IDL显示图形和点亮相应的像素点后,IDL就不知
道自己做了些什么。这意味着,在用户重置图形窗口大小时,IDL无法进行相应的响应。总
之,在这种模式下图形显示不能被刷新,除非再次输入图形命令。
但是,栅格图形命令在IDL中被广泛应用,因为它们简单快捷。而且,将看到,如果仔
细地用栅格图形命令编写IDL程序时,可以克服许多与栅格图形命令相关的限制。本章将介
绍一些关于如何用栅格图形命令写出可调节尺寸的IDL图形窗口或进行直接硬拷贝输出的
必备概念。本章的图形命令都是Research Systems公司所说的直接图形。
另外一种被Research Systems公司称为对象图形的图形方式在IDL5.0中被引入。对象
图形使用时相对难一点,但它在IDL编程方面更强大更灵活。对象图形不是为了在命令行使
用而开发的,而是用在IDL的程序中,特别是用于带有界面的程序中(带有图形用户界面的
程序)。本书对对象图形不做介绍。
创建线画图
生成线画图最简单的方法是绘出一个矢量。可以用LoadData命令打开时序数据集。
LoadData命令是本书所带的一个IDL程序(详细细节参考第5页的“本书中所用的IDL程
序和数据文件”)。它用来装载本书的编程例子中所需的数据。键入如下语句以查看所能使用
的数据集:
IDL>curve=LoadData()
如果输入LoadData命令时忘掉了括号,需要在它正常工作前重新编译LoadData程序。
原因是,IDL在命令行会认为它是一个变量并进行相应地处理。重新编译后,“loaddata”
这个函数名在IDL的函数名列表中。键入:
IDL>.Compile LoadData
时序数据是在LoadData数据列表上的第一个数据集。点击它,数据就被装入到curve
变量中。另外一种选择第一个数据集的方法是,按如下方法使用LoadData:
IDL>curve=LoadData(1)
要查看curve变量如何被定义,键入:
IDL>Help, curve
CURVE FLOAT =Array[101]
将发现curve是一个具有101个元素的浮点矢量(或一维数组)。
要绘出该矢量,可键入:
IDL>Plot, curve
IDL试图用少量的信息尽可能地绘出漂亮的线画图。在这种情况下,x轴或水平轴被标
识为从0到100,这与矢量中的元素个数相对应。而y轴或垂直轴则是用数据坐标来标识(它
是取决于数据的坐标轴)。
但大多数情况下,线画图用于显示一组数据(独立数据)相对另外一组数据(非独立数
据)的关系。例如,上面的曲线可能代表在某段时间内采集数据的信号。可能需要绘制某个
时刻的信号值。在这种情况下,需要一条与该曲线矢量具有相同元素个数的矢量(这样可以
获得一一对应的相关性),并将该矢量转换为实验中所用的时间单位。例如,可以创建一个
时间矢量,并绘出它与上述曲线矢量的关系图:
IDL>time=FIndGen(101)*(6.0/100)
IDL>Plot, time, curve
FIndGen命令创建一个元素值为0到100的共101个元素的矢量。乘法因子按比例缩
图1:独立数据(时间)与非独立数据(曲线)关系图。
小每个元素的大小,最后的结果是一个元素值为0到6之间的共101个元素的矢量。图形输
出结果应与图1相似。
注意,在此图中的坐标轴上没有相应的标题。在图上设置标题是很容易的,只要用
XTitle和YTitle关键字既可实现。例如,为此曲线图加标题,可键入:
IDL>Plot, time, curve, XTitle='Time Axis', $
YTitle='Signal Strength'
甚至可以用Title关键字对整个图形设置标题,键入:
IDL>Plot,time,curve,XTitle='Time Axis', $
YTitle='Signal Strengh',Title='Experiment 35M'
输出结果应与图2一样。
图2:简单的带坐标轴标题和图形标题的线画图
注意图形显示应该为在黑色背景下的白线图,而上图显示为在白色背景下的黑线。这些
插图包含在用IDL生成的PostScript文件中。一般情况下Postscript文件把图形颜色和背
景颜色反过来。(参考189页的“问题:PostScript设备对背景颜色和图形颜色的不同处理”。)
注意,图形标题稍微大于坐标轴的标题。事实上,是1.25倍的关系。可以用CharSize
关键字改变所有图形注记的大小。例如,可以将坐标轴标题的字符放大50%:
IDL>Plot, time, curve, XTitle='Time Axis', $
YTitle='Signal Strength', Title='Experiment 35M', $
CharSize=1.5
如果希望所有的图形显示的字符比正常情况下大,可以通过绘图系统变量上设置
CharSize的大小,如下:
IDL>!ze=1.5
现在,所有后续的图形显示都将用较大的字符,除非用CharSize关键字在图形输出命
令中特别地控制。
甚至可以用[XYZ]CharSize关键字单独改变每个轴的标识字符的大小。例如,如果想使
Y轴的注记比X轴的大两倍,则可键入:
IDL>Plot, time, curve, XTitle='Time Axis', XCharSize=1.0, $
YTitle='Signal Strength', YCharSize=2.0
记住,[XYZ]Charsize关键字使用当前字符的大小作为基础计算出各自的大小。当前字
符的大小一般储存在!ze系统变量中。这意味着,如果设置XCharSize关键字为2,
当!ze系统变量也被设置为2时,字符将比平常大四倍。
定制线画图
上面是简单的线画图,除了数据本身外,没有多少其它信息。然而,有许多方法可用来
定制和标注线画图。Plot函数可以被50多种不同的关键字修饰。下面的事情也许想做一做:
1. 改变线型或粗细。
2. 使用符号,符号之间可以有线条和没有线条存在。
3. 创建自己的绘图符号。
4. 给线图加入颜色提示重要特性。
5. 改变刻度标记的长度或刻度标记之间的间隔。
6. 使用对数来标度图形坐标轴。
7. 改变绘图范围来绘出感兴趣的数据段。
8. 删除坐标轴或改变绘图方式。
改变线条的线型和粗细
例如,想用不同的线型画出数据。如画一条线型为长虚线的线条,可以这样实现:
IDL>Plot, time, curve, LineStyle=5
对于线画图来说,可通过LineStyle关键字选用表3中列出的索引号确定不同的线型。
例如,想使用虚线画出曲线,可以把LineStyle关键字的值设置为2:
IDL>Plot, time, curve, LineStyle=2
索引号
0
1
2
3
4
5
线型
实线
点线
虚线
划点线
划点点线
长虚线
表3:可以通过赋予LineStyle这个关键字不同索引号来改变线型
线画图中线的粗细同样能够被改变。例如,如果想使用比正常值粗3倍的虚线来显示图
形,可键入:
IDL>Plot, time, LineStyle=2, Thick=3
用符号代替线条显示数据
假如想用符号代替线条显示数据,就象LineStyle关键字一样,也存在类似的索引号供
选择,以确定不同的线画图符号。表4给出了能通过PSym(绘图符号)关键字来选择的索
引号。例如,可以通过设置PSym为2,用星号来绘图,如下:
IDL>plot, time, curve, Psym=2
输出的图形应与图3中的图形相似。
图3:用符号而不是线条来显示线画图。
索引号
0
1
2
3
4
5
6
7
8
9
10
-PSym
绘图符号
无符号,通过线条连接点
加号
星号
点
菱形
三角形
方形
X
用户自定义符号(用UserSym过程来定义)
未用
直方图
负值表示用线条连接相应的符号
表4:这些符号索引号可以通过PSym关键字来引用以便在绘图中使用不同的符号。注意绘
图符号为负值时表示用线条来连接相应的符号。
用线条和符号来显示数据
赋予PSym关键字一个负值就可以用线条将图形符号连接起来。例如,可用实线与三角
形符号绘出数据,键入:
IDL>Plot, time, curve, PSym=-5
为创建一个更大的符号,可用SymSize关键字。下面的语句画出的符号为正常的两倍。符
号值为4时符号的大小为正常值的4倍,依此类推。
IDL>Plot, time, curve, PSym=-5, SymSize=2.0
创建自己的图形符号
如果富有创造力,甚至可以创建自己的图形符号。UserSym命令就用于此目的。在创建
了一个特殊的图形符号之后,可通过设置PSym关键字为8来选择它。以下是一个创建五角
星符号的例子。 x,y矢量定义五角星的顶点,它们的值为偏离原点(0,0)的位置。可以
用UserSym命令通过设置关键字Fill创建一个填充的图形符号:
IDL>x=[0.0, 0.5, -0.8, 0.8, -0.5, 0.0]
IDL>Y=[1.0, -0.8, 0.3, 0.3, -0.8, 1.0]
IDL>TvLCT, 255, 255, 0, 150
IDL>UserSym, x, y, Color=150, /Fill
IDL>Plot, time, curve, PSym=-8, SymSize=2.0
输出结果应与图4相似。
图4:用UserSym程序创建的符号来绘制的图。
用不同的颜色绘制线画图
可以用不同的颜色绘制线画图(颜色将在第83页的“IDL的颜色运用”中详细讨论。
现在,只须按如下键入TvLCT命令即可,以后将学到这个命令意味着什么。实质上,装载了
三个颜色矢量,每个矢量的三个分量分别代表颜色的三个组成部分红,绿,蓝。这三种颜色
矢量为碳灰,黄,绿色。)例如将颜色索引号1、2和3分别设置为碳灰,黄,绿色,键入:
IDL>TvLCT, [70,255,0], [70,255,255], [70,0,0], 1
在碳灰背景下绘黄色图,键入:
IDL>Plot, time, curve, Color=2, Background=1
如果只是想使线条成为不同的颜色,首先必须将NoData关键字打开来绘图,然后用
OPlot命令(下面要讨论的)覆盖该图。例如,在碳灰色背景上绘制黄色外框,数据用绿色显
示,键入:
IDL>Plot, time, curve, Color=2, Background=1, /NoData
IDL>OPlot, time, curve, Color=3
限定线画图的范围
并非所有的数据都必须在一个线画图中绘出,可以用关键字限定绘图的数据量。例如,
可仅绘出位于X轴上2至4之间的数据,键入:
IDL>Plot, time, curve, XRange=[2, 4]
或者仅绘出Y值在10至20之间,X值在2至4之间的部分数据图形,键入:
IDL>Plot, time, curve, YRange=[10, 20], XRange=[2, 4]
也可以通过给定关键字数据范围来反转数据的方向。例如,可将Y轴的0点设置为图形
的顶端,如下:
IDL>Plot, time, curve, YRange=[30, 0]
输出结果应与图5相似。
如果所选择的轴的范围不适合IDL关于坐标轴美观标记的规定,IDL将忽略所要求的范
围。试一试如下的命令:
IDL>Plot, time, curve, XRange=[2.45, 5.64]
X轴上显示的范围将是从2至6,这并不是对IDL所要求的精度。为确保轴上显示的范
围正如所要求的那样,可将XStyle关键字设置为1,如下:
IDL>Plot, time, curve, XRange=[2.45, 5.64], XStyle=1
下一节将学到更多关于[XYZ]Style关键字的知识。
图5: 将Y轴0点设置为图形顶端的图形
改变线画图的风格
可以方便地改变线画图的许多特性,包括它们的外观形式。例如,可能不在意线画图的
方框。如果是这样,可以用[XYZ]Style这些关键字改变线画图的特性。表5给出了可通过
这些关键字来改变线画图风格的值。例如,为除去方框线,只留下X轴或Y轴,可键入:
IDL>Plot, time, curve, XStyle=8, YStyle=8
值
1
2
4
8
16
对坐标轴的影响
精确的坐标轴范围
扩展坐标轴范围
不显示整个坐标轴
不显示外框(只画坐标轴)
屏蔽Y轴起始值为0的设置(只有Y轴有此属性)
表5:[XYZ]Style关键字参数表,用于设置坐标轴的属性。注意:这些值可以累加从而设
置坐标轴的多个而非单个属性。
可以完全隐藏一个轴。例如,仅用Y轴显示图形,可键入:
IDL>Plot, time, curve, XStyle=4, YStyle=8
输出结果应与图6相似:
图6: 关闭X轴和方框只剩Y轴的线画图
可以用Y轴和Y方向的网格线来显示同一幅图:
IDL>Plot, time, curve, XStyle=4, YTickLen=1, YGridStyle=1
[XYZ]Style关键字可以一次设置坐标轴的多个特性。可以通过累加适当的值来实现。
例如,可以从表5中看出,强制使用精确的坐标轴范围的参数值为1,而用来删除方框线的
参数值为8。为实现上述两项功能,即让X轴显示精确的范围又隐藏方框线,可将两个参数
值相加:
IDL>plot, time, curve, xstyle=8+1, xrange=[2, 5]
在线画图上创建网格线,通常可用TickLen关键字来完成。如下:
IDL>Plot, time, curve, TickLen=1
将[XYZ]TickLen关键字设置为一个负值可以创建向外的刻度标记。例如,为创建向外
的刻度标记,可键入:
IDL>Plot, time, curve, TickLen=-0.03
在某个轴上创建向外的刻度标记,可将[XYZ]TickLen关键字设置为一个负值。例如,
只在X轴上创建向外的刻度标记,键入:
IDL>Plot, time, curve, XTickLen=-0.03
可以用[XYZ]Ticks和[XYZ]Minor关键字,在一个轴上选择主要的和次要的刻度标记的
个数。例如,在X轴上创建两个主要的刻度间隔,每个主要的刻度间隔内设置10个次要的
刻度标记,键入:
IDL>Plot, time, curve, XTicks=2, XMinor=10, XStyle=1
在线画图上绘出多种数据集
没有必要限制自己仅仅用一组数据绘制线画图。IDL程序允许在同一套坐标轴内显示任
意多套数据。OPlot命令就用于此目的。键入以下命令,输出结果应与图7相似:
IDL>Plot, curve
IDL>OPlot, curve/2.0, LineStyle=1
IDL>OPlot, curve/5.0, LineStyle=2
初始的Plot命令为以后的绘图建立数据比例(!X.S和!Y.S是比例参数)。或者说, !X.S
和!Y.S系统变量告诉IDL如何在数据范围内取点以及如何将该点显示在设备坐标空间上。
要确保初始图形有足够的轴长,以便包容以后绘制的所有图形,否则数据将被裁剪掉。可在
第一个Plot命令中用XRange和YRange关键字来创建一个足够大的数据范围。为区别不同
的数据集,可用不同的线型,不同的颜色,不同的图形符号等。Oplot命令接受很多被Plot
命令接受的关键字。
IDL>TvLCT, [255, 255, 0], [0, 255, 255], [0, 0, 0], 1
IDL>Plot, curve, /NoData
IDL>OPlot, curve, Color=1
IDL>OPlot, curve/2.0, Color=2
IDL>OPlot, curve/5.0, Color=3
图7:在同一个线画图上可以绘制无限多套数据集
图8:具有两个Y轴的线画图。第二轴是用Axis命令来定位的。一定要用Save关键字来将
数据比例保存起来
在多个轴的图上显示数据
有时,希望在同一个线画图上显示两个或多个数据集,并用不同的y轴表示不同的数据
集。使用Axis命令很容易建立所需数量的坐标轴。使用Axis命令的关键是使用save关键
字来存储正确的绘图比例参数(即存储在!X.S和!Y.S系统变量中的比例参数),以便后续图
形的调用。
下面的例子在已绘出一幅图后,用带Save关键字的Axis命令建立第二个Y轴。OPlot
命令中的曲线将调用通过Axis命令保存的比例因子,以确定其在图形中的位置。正确的命
令是如下:
IDL>Plot, curve, YStyle=8, YTitle='Solid Line', $
Position=[0.15, 0.15, 0.85, 0.95]
IDL>Axis, YAxis=1, YRange=[0, Max(curve*5+1)], /Save, $
YTitle='Dashed Line'
IDL>OPlot, curve*5, LineStyle=2
Position关键字用来确定第一个图形在页面内的位置。为了解更多关于Position关键
字的知识,可参阅第48页的“在图形显示窗口中确定图形输出位置”章节。输出图形应与
图8相似。
创建曲面图
在IDL程序中,任何二维的数据组都可以用Surface命令生成一个曲面图(经过自动消
隐)。首先,必须打开数据文件,用LoadData命令打开 Elevation Data数据集。键入:
IDL>peak=LoadData(2)
通过键入Help命令,可以发现这是一个41*41的浮点数组。键入:
IDL>Help, peak
这个数组可以用一个命令使之视面图:
IDL>Surface, peak, CharSize=1.5
输出结果应与图9相似。
图9:利用高程数据生成简单的曲面图。
注意,如果仅用单个数组作为变量调用Surface命令,它将把该数组作为其元素个数(此
例在X和Y方向都为41)的函数来绘图。(可以使用CharSize关键字来改变字符的大小,
以便更容易看清楚)。但是,正如前面使用Plot命令一样,可以规定X和Y轴的数值,以便
显示的图形具有实际意义。例如,X和Y轴的数值可以是经纬度坐标。这里,使纬度范围为
从24度到48度,经度范围为-122度到-72度:
IDL>lat=FIndGen(41)*(24./40)+24
IDL>LON=FIndGen(41)*50.0/41-122
IDL>Surface, peak, lon, lat, XTitle='Longitude', $
YTitle='Latitude', ZTitle='Elevation', CharSize=1.5
输出结果应与图10相似。
图10:一个具有实际意义坐标值的曲面图。
以上命令中的lon和lat参数是单调递增并且是规则的。它们描述了曲面网格线的位置。
但网格没有必要是规则的。试想一下,如果使经度数据点不规则分布会出现什么情况。例如,
可以键入以下命令模拟随机分布的经度点:
IDL>seed=-1L
IDL>newlon=RandomU(seed, 41)*41
IDL>newlon=newlon[Sort(newlon)]*(24./40)+24
IDL>Surface, peak, newlon, lat, XTitle='Longitude', $
YTitle='Latitude', ZTitle='Elevation', CharSize=1.5
现在发现经度X值是没有规则分布的。尽管看起来数据被重新取样了,然而却不是。能
很容易地在经度和纬度数据点指定的位置处画出曲面图的网格线。输出结果应与图11相似。
图11:同样的曲面图,但其X矢量具有不规则的空间分布
定制曲面图
有70多个不同的关键字可以用来修饰曲面图。实际上,许多关键字在Plot命令中已经
学过。例如在上面的代码中,就使用了相同的标题关键字对曲面图的轴进行标记。然而要注
意,当用Title关键字时,所添加的标题被旋转了,从而保证标题总是位于曲面图的XY平
面内。键入:
IDL>surface, peak, lon, lat, XTitle='Longitude', $
YTitle='Latitude', Title='', Charsize=1.5
这并非总是所希望的。如果想使图形标题位于与显示面平行的平面内,就必须用
Surface命令绘制曲面图,而用XYOutS命令显示标题(第55页有关于XYOutS命令的详细
信息)。比如,键入:
IDL>Surface, peak, lon, lat, Xtitle=’Longitude’, $
Ytitle=’Latitude’, Charsize=1.5
IDL> XYOutS, 0.5, 0.90, /Normal, Size=2.0, Align=0.5, $
‘’
旋转曲面图
在观察曲面图时可能希望能旋转一个角度。曲面图可以用Ax关键字使其绕X轴或用Az
关键字使其绕X轴旋转。当从轴上的正值向原点观察时,曲面图以逆时针方向,按某个角度
值旋转。当Az和Ax关键字被忽略时其缺省值是30度。例如,使曲面图绕Z轴旋转60度,
绕X轴旋转35度,则可键入:
IDL> Surface, peak, lon, lat, Az=60, Ax=35, Charsize=1.5
输出结果应与图12相似。
图12:用Az和Ax关键字使曲面图旋转
为曲面赋色
有时,可能想为曲面图上赋上颜色以强调某种特性。给曲面图着色是很简单的,只需使
用在线画图中用过的赋色关键字即可。(颜色将在第83页的“IDL的颜色运用”中详细讨论。
现在,只须按如下键入TvLCT命令即可,以后将学到这个命令意味着什么。实质上,装载了
三个颜色矢量,每个矢量的三个分量分别代表颜色的三个组成部分红,绿,蓝。这三种颜色
矢量为碳灰,黄,绿色)。例如,在碳灰色背景上创建一个黄色的曲面图,可键入:
IDL> TvLCT, [70, 255, 0], [70, 255, 255], [70, 0, 0], 1
IDL> Surface, peak, Color=2, Background=1
如果想使曲面图的底面的颜色不同于顶面,比如说绿色,可以使用Bottom关键字来实
现:
IDL>Surface, peak, Color=2, Background=1, Bottom=3
如果想将轴以不同的颜色显示,比如绿色,而不是曲面,必须键入两个命令。第一个命
令使用NoData关键字,只将轴绘出。第二个命令是在关闭轴线后绘出曲面本身。查看第31
页的表5,了解[XYZ]Style关键字的参数值及其含意:
IDL>Surface, peak, Color=3, /NoData
IDL>Surface, peak, /NoErase, Color=2, Bottom=1,XStyle=4, YStyle=4, ZStyle=4
用不同的颜色画出曲面的格网线也是有可能的,而不同的颜色代表不同的数据。比如,
可用第二个数据集覆盖第一个,第二个数据集含有对第一个数据集的格网进行着色后的信
息。
为了说明如何工作,可打开一个名为Snow Pack的数据集,并用以下这些命令将此数据
作为一个曲面显示。注意,Snow Pack数据集的大小与peak数据集一样,都是41*41浮点
数组:
IDL>snow=LoadData(3)
IDL>Help, snow
IDL>Surface, snow
现在,通过用snow的变量值对peak变量的格网着色,将snow变量中的数据覆盖到peak
变量中数据的上面。首先,用LoadCT命令装载色彩表内的一些颜色。实际的阴影处理是通
过shades关键字完成的,如下:
IDL>LoadCT, 5
IDL>Surface, peak, Shades=BytScl(snow, Top=!_Size-1)
注意,必须用BytScl命令将snow数据集调整为所使用IDL时的色彩数。如果调整失败,
只能看到一套坐标轴,而看不到曲面显示。这是因为,数据必须调整到曲面阴影处理时所需
的0到255的范围。
修改曲面图外观
有很多关键字可以用来修改曲面图的外观或形式。例如,可以显示一个带边缘的曲面图。
使用Skirt关键字来指定边缘该画到何处。试试下面命令:
IDL>Surface, peak, Skirt=0
IDL>Surface, peak, Skirt=500, Az=60
图13:带边缘的曲面图
上面第一个命令的输出结果应与图13相似。
如果仅绘出水平线,获得一种层叠线形图,比如,键入:
IDL>Surface, peak, /Horizontal
如果愿意,可以通过关键字来只显示曲面的底面或顶面,而不是两者都显示(缺省是两
者都显示)。键入:
IDL>Surface, peak, /Upper_Only
IDL>Surface, peak, /Lower_Only
有时可能只想显示曲面本身,而不需要轴线。 可键入:
IDL>Surface, peak, XStyle=4, YStyle=4, ZStyle=4
创建阴影曲面图
创建阴影曲面图同样很简单,可使用Gouraud光源阴影算法创建阴影曲面图,键入:
IDL>Shade_Surf, peak
Shade_Surf命令接受大多数被Surface命令接受的关键字。例如,如果想旋转阴影曲
面,可以键入:
IDL>Shade_Surf, peak, lon, lat, Az=45, Ax=30
输出图形应与图14相似。
图14: 用Gouraud光源阴影算法生成的阴影曲面图
改变阴影处理参数
用Set_Shading命令可以改变Shade_Surf命令所使用的阴影处理参数。例如,要将光
源的光线的方向从平行Z轴的默认值[0,0,1]改变为平行X轴的方向[1,0,0],可键入:
IDL>Set_Shading, Light=[1, 0, 0]
IDL>Shade_Surf, peak
也可以从色彩表中挑选哪种颜色索引号用作阴影处理。例如,当想把红色色普表(色普
表3)装载到颜色索引号100到199之中,并将之用于阴影处理,可键入:
IDL>LoadCT, 3, NColors=100, Bottom=100
IDL>Set_Shading, Values=[100, 199]
IDL>Shade_Surf, peak
注意将光源位置和颜色参数恢复原值,否则练习的继续,可能会造成混乱。
IDL>LoadCT,5
IDL>Set_Shading, Light=[0,0,1], Value=[0,!D,Table_Size-1]
用其它数据集为阴影处理提供参数
首先,就象Surface命令一样,其它数据集也可以为阴影处理时的各数据点提供颜色值。
正如前述,可以用Shades关键字为曲面上各点指定颜色索引号。每个像素点的阴影处理都
是根据该点周围数据值通过插值求出。例如,下面是一个用snow变量生成的阴影曲面图:
IDL>Shade_Surf, snow
现在用这个数据集来对最初的高程数据集进行阴影处理,键入:
IDL>Shade_Surf,peak,lon,lat, Shades=BytScl(snow, Top=!_Size)
输出结果应如图15所示:
图15:用snow数据集对peak数据进行阴影处理
如果要求根据数据点的高程值来对曲面进行阴影处理,可简单地对数据集本身进行字节
比例缩放即可,键入:
IDL>Shade_Surf, peak, Shades=BytScl(peak, Top=!_Size)
将另一数据集覆盖在曲面图上是一种给数据升维的方法。例如,可将一组数据集覆盖在
一个三维曲面图上,就可以直观的获得四维的信息。如果同时让两组数据集合随时间活动起
来,就可以直观的获得五维信息。(关于数据动画参阅104页的“IDL的动画数据”)
有时只是想将原始曲面覆盖在经过阴影处理的曲面图上,通过结合使用Shade_Surf命
令和Surace命令可轻松的做到。例如:
IDL>Shade_Surf, peak
IDL>Surface, peak, /NoErase
创建等值线图
在IDL中,任意二维数组都可以用一个Contour命令显示为等值线图。如果已经在这次
IDL运行中定义了peak变量,可直接使用该变量。如果没有定义,可以使用LoadData命令
来载入Elevation Data中的数据集。键入:
IDL>peak=LoadData(2)
IDL>Help, peak
这个数据集通过一个简单的命令即可显示为等值线图(图16):
IDL>Contour, peak, CharSize=1.5
图16:一个基本的等值线图,注意X、Y轴的标记代表该数组中的元素个数
注意,如果仅用单个二维数组作为参数调用Contour命令,它将把该数组作为其元素个数
(此例在X和Y方向都为41)的函数来绘图。如前述所用Surface命令一样,可以指定X
轴和Y轴的数值,以便使其具有实际意义。例如,可以象前述一样使用经度和纬度矢量。如
下所示:
IDL>lat=FIndGen(41)*(24./40)+24
IDL>lon=FindGen(41)*50.0/40-122
IDL>Contour, peak, lon, lat, XTitle='Longitude', $
YTitle='Latitude'
注意轴被自动缩放了。从很多地方可以看到这一点。首先,等值线没有延伸到等值线图
的边缘,其次,可以发现轴上的标记与lon矢量和lat矢量的最小值和最大值不同。
IDL>Print, Min(lon), Max(lon)
IDL>Print, Min(lat), Max(lat)
为了防止轴的自动缩放,可以设置XStyle和YStyle关键字,如下:
IDL>Contour, peak, lon, lat, XTitle='Longitude', $
YTitle='Latitude', XStyle=1, YStyle=1
该命令得到图形应如图17所示。
图17:具有实际数量意义的等值线图
在早期的IDL版本中,Contour 命令使用所说的单元画法来计算并绘画数据的等值线。
在这种方法中,等值线图是从图底画到图顶。这种方法是有效的,但是它不允许选项,比如
标注等高线。而单元跟踪法被用来完整地画出围绕等值线图的每一条等值线。这需要较长的
时间,但可以允许对等值线作更多的控制。例如,等值线可以断开用于等值线的标注。这种
单元跟踪法可以用Follow关键字来调用:
IDL>Contour, peak, lon, lat, XStyle=1, YStyle=1, /Follow
版权声明:本文标题:IDL入门教程二(上)(简单图形显示II) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1715957838a478824.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论