IDL入门教程二(上)(简单图形显示II)
- 格式:doc
- 大小:243.00 KB
- 文档页数:20
IDL入门教程范文IDL(Interactive Data Language)是一种用于科学数据分析、可视化和探索的编程语言。
它是一种高级语言,专门用于处理和分析科学数据,具有丰富的数据处理和绘图功能。
本文将为初学者介绍IDL的基本概念和语法,并演示一些常用的数据处理和可视化技巧。
1.IDL的基本概念和语法:- 数据类型:IDL支持常见的数据类型,如整数(int)、浮点数(float)、字符(char)和字符串(string),以及数组和结构体等复杂数据类型。
- 变量定义和赋值:IDL使用类似于C和Fortran的语法,可以使用等号(=)进行变量赋值。
例如,`x = 10`表示将整数值10赋给变量x。
-数组操作:IDL支持多维数组操作,可以使用方括号([])指定数组的维度和索引,如`a[0,1]`表示取二维数组a的第一行第二列的元素。
- 函数和过程:IDL支持函数和过程的定义和调用。
函数可以返回一个值,过程则只执行一系列操作而不返回值。
例如,`function sum, a, b, c`表示定义一个函数sum,接受三个参数a、b和c,并返回它们的和。
- 循环和条件语句:IDL支持常见的循环语句(如for循环和while循环)和条件语句(如if语句和switch语句),用于控制程序的执行流程。
-文件读写:IDL提供了读写文本文件和二进制文件的函数,可以方便地读取和保存数据。
2.数据处理和可视化:- 数据加载:IDL提供了加载各种数据格式的函数,如文本文件、图像文件和NetCDF文件等。
通过读取数据文件,可以将数据加载到IDL的变量中进行处理和分析。
-数据处理:IDL提供了各种数据处理函数,如数组运算、统计分析和滤波等。
可以通过这些函数对加载的数据进行加工和处理,以获取所需的结果。
-数据可视化:IDL有丰富的数据可视化功能,可以通过调用绘图函数绘制直方图、散点图、曲线图、等高线图等。
绘图函数提供了多种参数和选项,可以灵活地定制绘图效果。
第二章简单的图形显示本章概述科学分析最基本的能力就是以简单的线画图、等值线图和曲面图来显示所研究的数据。
在这一章中,将知道用这些方式来显示数据是多么容易。
也将学会用系统变量和关键字来定位和标注简单的图形显示。
将学会如下几点: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程序和数据文件”)。
从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关键字,如下所示:IDL>vals=[200, 300, 600, 750, 800, 900, 1200, 1500]IDL>Contour, peak, lon, lat, XStyle=1, YStyle=1, /Follow, $Levels=vals要选择12个间距相等的等值线间隔,可编写如下代码:IDL>nlevels=12IDL>step=(Max(peak)-Min(peak))/nlevelsIDL>vals=Indgen(nlevels)*step+Min(peak)IDL>Contour, peak, lon, lat, XStyle=1, YStyle=1, /Follow, $Levels=vals如果喜欢,可以C_Labels关键字精确的指定哪一根等值线应该标注。
IDL语言简明教程IDL(Interactive Data Language)是一种用于科学数据分析和可视化的专业编程语言,具有广泛的应用领域,包括天文学、地球物理学、气象学、生物学等。
IDL具有易于学习和使用的特点,本文将为您提供一个简明教程,帮助您快速入门IDL语言。
第一部分:IDL基础1.变量和数据类型-变量用于在内存中存储数据,可以用字母、数字和下划线命名,并区分大小写。
- 常见的数据类型包括整数(int)、浮点数(float/double)、字符串(string)和数组(array)。
2.数组和矩阵运算-数组是IDL中最常用的数据结构,可以存储一维或多维的数据。
-可以使用运算符进行数组的加减乘除运算,或进行矩阵运算。
-数组的索引从0开始,可以使用方括号指定索引值。
3.控制流语句- 控制流语句用于控制程序的执行流程,包括条件语句(if-else)和循环语句(for、while等)。
-条件语句根据条件的真假执行相应的代码块。
-循环语句用于重复执行一段代码,可以指定循环的次数或根据条件判断是否继续循环。
第二部分:IDL数据处理1.数据输入和输出- 使用read_*函数可以从文件中读取数据,如read_ascii、read_binary等。
- 使用write_*函数可以将数据写入文件,如write_ascii、write_binary等。
-IDL还提供了图形界面,可以通过鼠标交互进行数据的选择和操作。
2.数据处理函数-IDL提供了丰富的数据处理函数,用于对数据进行统计分析、滤波、插值等操作。
- 常见的函数包括mean、median、filter、interpolate等,可以根据具体需求选择函数进行数据处理。
3.图像处理和可视化-IDL可以进行图像处理和可视化,包括图像读取、显示、增强和保存等操作。
- 使用image_read函数可以读取图片文件,使用tv函数可以显示图像。
- IDL还提供了绘制2D和3D图形的函数,如plot、contour、surface等,可以将数据可视化。
第二章简单的图形显示本章概述科学分析最基本的能力就是以简单的线画图、等值线图和曲面图来显示所研究的数据。
在这一章中,将知道用这些方式来显示数据是多么容易。
也将学会用系统变量和关键字来定位和标注简单的图形显示。
将学会如下几点: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, curveCURVE FLOAT =Array[101]将发现curve是一个具有101个元素的浮点矢量(或一维数组)。
要绘出该矢量,可键入:IDL>Plot, curveIDL试图用少量的信息尽可能地绘出漂亮的线画图。
在这种情况下,x轴或水平轴被标识为从0到100,这与矢量中的元素个数相对应。
而y轴或垂直轴则是用数据坐标来标识(它是取决于数据的坐标轴)。
但大多数情况下,线画图用于显示一组数据(独立数据)相对另外一组数据(非独立数据)的关系。
例如,上面的曲线可能代表在某段时间内采集数据的信号。
可能需要绘制某个时刻的信号值。
在这种情况下,需要一条与该曲线矢量具有相同元素个数的矢量(这样可以获得一一对应的相关性),并将该矢量转换为实验中所用的时间单位。
例如,可以创建一个时间矢量,并绘出它与上述曲线矢量的关系图:IDL>time=FIndGen(101)*(6.0/100)IDL>Plot, time, curveFIndGen命令创建一个元素值为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>!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:表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 X8 用户自定义符号(用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, 150IDL>UserSym, x, y, Color=150, /FillIDL>Plot, time, curve, PSym=-8, SymSize=2.0输出结果应与图4相似。
图4:用UserSym程序创建的符号来绘制的图。
用不同的颜色绘制线画图可以用不同的颜色绘制线画图(颜色将在第83页的“IDL的颜色运用”中详细讨论。
现在,只须按如下键入TvLCT命令即可,以后将学到这个命令意味着什么。
实质上,装载了三个颜色矢量,每个矢量的三个分量分别代表颜色的三个组成部分红,绿,蓝。
这三种颜色矢量为碳灰,黄,绿色。