Professional Documents
Culture Documents
本章概述
科学分析最基本的能力就是以简单的线画图、等值线图和曲面图来显示所研究的数据。在
这一章中,将知道用这些方式来显示数据是多么容易。也将学会用系统变量和关键字来定
位和标注简单的图形显示。
将学会如下几点:
1. 如何用 Plot 命令将数据显示为线画图。
2. 如何用 Surface 和 Shade_Surf 命令将数据显示为曲面图。
3. 如何用 Contour 命令将数据显示为等值线图。
4. 如何在显示窗口上定位显示图形。
5. 如何用公共关键字来标注和自定义图形显示。
IDL 中简单的图形显示
创建线画图
图 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>!P.CharSize=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 关键字使用当前字符的大小作为基础计算出各自的大小。当前字
符的大小一般储存在!P.CharSize 系统变量中。这意味着,如果设置 XCharSize 关键字为
2,当!P.CharSize 系统变量也被设置为 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
用符号代替线条显示数据
图 3:用符号而不是线条来显示线画图。
索引号 绘图符号
0 无符号,通过线条连接点
1 加号
2 星号
3 点
4 菱形
5 三角形
6 方形
7 X
8 用户自定义符号(用 UserSym 过程来定义)
9 未用
10 直方图
-PSym 负值表示用线条连接相应的符号
表 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 程序创建的符号来绘制的图。
用不同的颜色绘制线画图
限定线画图的范围
并非所有的数据都必须在一个线画图中绘出,可以用关键字限定绘图的数据量。例如,可
仅绘出位于 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
相似。
创建曲面图
图 9:利用高程数据生成简单的曲面图。
图 10:一个具有实际意义坐标值的曲面图。
定制曲面图
旋转曲面图
图 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
修改曲面图外观
有很多关键字可以用来修改曲面图的外观或形式。例如,可以显示一个带边缘的曲面图。
使用 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
创建阴影曲面图
改变阴影处理参数
如果要求根据数据点的高程值来对曲面进行阴影处理,可简单地对数据集本身进行字节
比例缩放即可,键入:
IDL>Shade_Surf, peak, Shades=BytScl(peak, Top=!D.Table_Size)
将另一数据集覆盖在曲面图上是一种给数据升维的方法。例如,可将一组数据集覆盖在
一个三维曲面图上,就可以直观的获得四维的信息。如果同时让两组数据集合随时间活动起
来,就可以直观的获得五维信息。(关于数据动画参阅 104 页的“IDL 的动画数据”)
有时只是想将原始曲面覆盖在经过阴影处理的曲面图上,通过结合使用 Shade_Surf 命
令和 Surace 命令可轻松的做到。例如:
IDL>Shade_Surf, peak
IDL>Surface, peak, /NoErase
创建等值线图
图 17:具有实际数量意义的等值线图