IDL教程.doc_第1页
IDL教程.doc_第2页
IDL教程.doc_第3页
IDL教程.doc_第4页
IDL教程.doc_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验一 IDL的介绍和基础知识目的:了解IDL的构成和基本框架体系;熟练掌握IDL的变量;掌握IDL的命令书写及数据的输入输出原理:标量,矢量,数组,结构体;命令书写规则;数据输入输出方法软件:IDL内容:一、介绍IDLIDL(Interactive Data Language)交互式数据语言是进行数据分析、可视化表现和应用开发的理想软件工具。作为面向矩阵、语法简单的第四代可视化语言。IDL的特性包括:高级图像处理能力、交互式二维和三维图形技术、面向对象的编程方式、OpenGL图形加速、量化可视化表现、集成数学与统计学算法、灵活的数据输入输出方式、跨平台图形用户界面工具包、连接ODBC兼容数据库及多种程序连接工具等。IDL是完全面向矩阵的,相比常用语言它具有快速分析超大规模数据的能力,而相比于同样面向矩阵的其他软件,它又能够更容易实现图形对象的交互操作和图形、图像的高级处理。IDL的用户群分布很广。它不但可以为科学研究人员提供交互式浏览和分析数据的环境,为程序员提供快速源程序开发及跨平台发布的高级编程语言,还可以为三维动画制作人员和三维地理信息系统应用人员提供良好的软件应用平台。在国外IDL已经被列为大学的标准课程,其功能和应用效果完全可以替代如Matlab等其他同类科学计算应用软件。在国内IDL要比国外稍微滞后,还处在推广和应用的初期。许多科研单位和一些大学在与国外单位交流中,特别是一些留学归国人员,是IDL在国内应用的先行者和忠实用户。随着IDL应用和市场的广泛进入和从科研院所的高端应用到更广泛地民用化的接受过程,越来越多的人将了解和接受应用IDL。 IDL给用户提供3种不同的工作方式:命令交互方式、程序执行方式和菜单操作方式。可以根据用户需要配合使用。二、IDL命令书写规则:命令动词,参数1,参数n,关键字1,关键字n(1)每条命令必须以命令动词开始,动词后面的选择项可以必选或者可选。(2)参数在命令动词的右边,一般有确定的顺序和确定的类型,一般是必选项。(3)关键字在命令动词的右边,一般有确定的类型,但是顺序是任意的,而且一般为可选项。(4)用逗号分隔每条命令中的各个选项。(5)一条命令太长,一条写不下,用$在行尾进行分行,并在下一行继续写。不分大小写(但是要有统一的习惯)注释符“;”续行符“$”分隔符“,”IDL print,hello,format=(5x,A5)三、IDL的基础知识1、变量(1)命名规则变量名称的最大长度不超过255个字符,变量的首位只能是字母和下划线,中后部只能是字母、数字、下划线“_”和连接符“$”。如下正确:reade6_$file only_8_bit ComputerType variables _day_of_year如下错误:name.last third%file 4th_list $temp(2)创建变量8位,256变量有两个重要属性:数据类型和组织结构。数据类型指出属于数据类型中的哪一种。在IDL中有14种基本数据类型。在图表1中可以看到每一种数据类型,每个类型创建的变量的字节大小、变量创建方式、数据类型之间强制转换的IDL函数名称。除了数据类型外,一个变量有一个组织结构。有效的组织结构有标量(例如单个数值)、矢量(真正的一维数组)、数组(最高可达八维)和IDL结构体(能包含各种数据类型的变量和组织结构,结构中独立的组成部分称为字段)。表1 : IDL中的14种基本数据类型数据类型字节数创建变量数据类型强制转换函数字节型1Var=0BthisVar=Byte(variable)16位有符号整型2Var=0thisVar=Fix(variable)32位有符号长整型4Var=0LthisVar=Long(variable)64位有符号整型8Var=0LLthisVar=Long64(variable)16位无符号整型2Var=0UthisVar=UInt(variable)32位无符号长整型4Var=0ULthisVar=ULong(variable)64位无符号整型8Var=0ULLthisVar=Ulong64(variable)浮点型4Var=0.0thisVar=Float(variable)双精度浮点型8Var=0.0DthisVar=Double(variable)复数8Var=Complex(0.0,0.0)thisVar=Complex(variable)双精度复数16Var=Dcomplex(0.0D,0.0D)thisVar=DComplex(variable)字符串0-32767Var=或Var=”thisVar=String(variable)指针4Var=Ptr_New()None对象4Var=Obj_New()None(3)IDL语言变量的特点及标量赋值创建IDL变量不需要事先声明,是通过赋值形式进行定义的语言变量定义。并且变量随时可以进行数据类型和维数的动态改变。IDL最强大的功能之一,就是大多数过程或函数都能在任何数据类型或组织结构上生效。这是因为IDL在运行时能改变变量的数据类型和组织结构(像世界上其他强大的事物一样,这种动态改变变量的属性的能力也有潜在的巨大危险!必须小心,确信知道正在使用哪种数据)。在IDL中,本质上讲变量是毫无意义的(像在Fortran或者C程序中),因为这种变量的数据类型很容易改变。例如: IDLnum = 3 IDLnum = num*5.2 IDLnum = float(3) 变量num被初始化为一个整数,由于数学运算的结果和重新赋值,它被动态地改变成浮点数值。这是因为IDL在数学计算当中为了保证最高的精度,将低精度的数据类型提升为高精度的数据类型。当num被再赋值(在等号的左边),它被提升为一个浮点数去保持等号右边计算的精度。思考下面这个例子: IDLresult=4*x保持高精度在这种情形下,不可能知道变量会产生哪种数据类型和组织结构,因为对x变量一无所知。事实上,结果主要取决于变量x的数据类型和数据结构。如果x是10个元素的浮点矢量,结果将会是10个元素的浮点矢量。如果它是100 200的长整型数组,结果也将是100 200的长整型数组。注意,如果x有一个字节的数据类型,那么结果将是一个整型数据类型(在这种情形下,组织结构并没有多大影响)。这是由于和整数相乘的结果。记住,等号右边的表达式总是在将数据类型和组织结构赋予等号左边的变量前计算的。IDL总是将变量提升到能保持表达式的计算精度的数据类型。l 注意整型变量关于整型变量有两种常见的错误。第一种涉及到整数数学操作。思考一下这个示例: IDLresult=12/5也许期望的是一个值为2.4浮点变量,但是结果却是一个值为2的整数。这是因为方程式右边的两个数字为整数。这是一个整数除法的例子。当然,找到这个问题的原因并不难,但有时由整型数据导致的问题会更微小,以致于难以发现。例如: 假如想知道IDL图形窗口的比率。窗口的大小(像素点或整数值)被储存在两个系统变量中。会写出如下的IDL代码: IDLaspect=!D.X_Size / !D.Y_Size系统变量它可能需要花掉很长的时间来找出为什么比率为零。正确的方法是写出一些代码以强制将一个整数值变成一个浮点,如下: IDLaspect=Float(!D.X_Size) / !D.Y_Size现在的比率变量就是一个所期望的浮点数了(4)IDL数组IDL是一个擅长于处理矢量或数组数据的软件,所以有大量的IDL命令用于创建不同数据类型的矢量和数组。特别是,有许多用于创建各种数据类型数组的函数,这类函数创建的数组每个元素的初始值为零。还有许多用于创建各种数据类型数组的函数,这类函数创建的数组每个元素的初始值为其在数组中的索引位置。在表2中将看到这些函数的列表。表2:IDL函数可以创建矢量和多维数组数据类型初始化函数产生索引值的函数字节型BytArrBIndGen16位有符号整型IntArr默认都为0IndGen以下标值为初值32位有符号长整型LonArrLIndGen64位有符号整型Lon64ArrL64IndGen16位无符号整型UIntArrUIndGen32位无符号长整型ULonArrULIndGen64位无符号整型ULon64ArrUL64IndGen浮点型FltArrFIndGen双精度浮点型DblArrDIndGen复数ComplexArrCIndGen双精度复数DComplexArrDCIndGen字符串StrArrSIndGen指针PtrArrNone对象ObjArrNone例如,创建100100初始值为零的字节型数组,输入: IDLarray=BytArr(100,100)创建一个有100个元素的浮点型矢量,初始数值为从0到99,输入:IDLvector=FIndGen(100)IDLvector=FIndGen(10,10)IDL语言数组的维数为:08维,数组的引用符号既可以用,也可以用()但推荐习惯使用因为函数的引用采用(),故数组调用采用可以与此相区别,数组定义时不能指定下标的区间,只能从0开始。IDLprint,vector0IDLprint,vector2IDL print,vector0:10 返回前0-10共11个元素l 多维数组:IDL语言数组的维数为08维,当维数大于2的时候就是多维数组了。值得注意的是:数组下标的顺序先是列标,后是行标,这正好与已习惯的线性代数中的矩阵或行列式相反,在IDL矩阵变换函数中会有更详细的介绍。在对多维数组操作时,多维数组的数据空间顺序是否了解清楚,是数据读写准确的重要环节。IDLvector=FIndGen(10,20)l 数组赋值基本包括三种模式IDL对数组赋值是比较灵活的,基本包括三种模式:1、定义数组之后,对元素进行赋值,如:IDLA=IndGen (3,3)IDLA1,2=02、通过数组索引和矩阵(指标)运算来赋值:IDLA1,*=A1,*3数组下标中“*”代表该维的所有元素。下标运算也可通过“:”指定区间:IDLA0:1,*=A0:1,*33、直接通过赋值来定义数组:IDLa=1,2,1,2,1,2,1,2,1,2,1,2这个数组的结构为:Array2, 2, 3l 用一维下标来存取数组可以使用一维下标来存取数组中的每一个元素。要知道数组元素是以行顺序存储的,例如要获得数组中的第四个元素,可以键入以下语句来存取:IDLA=IndGen (3,3) IDLPrint, A3这样就可以打印出数组A的第4个元素,要注意IDL中数组是按行存储。用一维下标可以存取多维数组中的元素,这是IDL语言的一个强大的工具。也可以用一维向量来做数组的下标。例如,倘若要存取数组中的第一,二,四和第六个元素,可键入: IDLindices=0,1,3,5IDLPrint, Aindices(5)系统变量IDL有一类特殊的预定义系统变量,系统变量通常是以“!”开头的,在这里我们只介绍几组常用的系统变量,在直接图形法(图形只可输出,不能进行交互操作)输出中会常用到。l !d 系统变量提供当前显示设备的信息,此类系统变量包含如下系统变量: 系统变量名变量描述!当前图形设备的名称!d.n_colors当前图形设备使用的颜色数!d.table_size当前分配的颜色表索引数!d.x_size当前图形窗口的宽(象素)!d.y_size当前图形窗口的高(象素)!d.window当前图形窗口的索引号(没创建和打开图形窗口,值为1)l !p系统变量;更改默认的画图设置,此类系统变量包含如下系统变量:系统变量名变量描述!p.color画图的颜色索引!p.charsize标签的字符大小!p.linestyle画线时的线性!p.multi指定在一个页面上画图的个数!p.position指定在一个页面上画图的位置!p.psym在画图时所用的符号样式!p.subtitle副标题(显示在x轴下)!p.title画图的标题l !x,!y,!z系统变量更改在画图上坐标轴的默认属性,此类系统变量包含如下系统变量(如前述系统变量,在前面加!x,!y,!z): 系统变量名变量描述minor在坐标轴上要显示的刻度数range设置坐标轴上显示数值的范围tickbane为每个主刻度设置一个注记数组(一般是字符串)ticks坐标轴上显示的刻度段数title坐标轴的标题(6)结构体结构是标量、数组,以及结构本身的集合,不同数据类型的变量可以用结构来存储。结构的基本形式是:StrName=name,Var_name1: Var_Def1, Var_nameN: Var_DefN。Var_namei为结构成员名称,Var_Def1 为该成员的定义。Name存在,则该结构为命名结构,否则为模糊结构。命名结构在运行过程中不可以改变结构,但模糊结构可以。结构的引用为StrName.Var_name1 或 Name.Var_name1。结构可以继承(但不传递初始值):匿名结构体IDLperson=name:li,number:4567IDL print,personIDL help,personIDL help,person,/structure获取结构体变量IDL print,IDL print,person.(1)调整结构体变量IDL =wangIDL print,person结构体的变量类型不能改变IDL person.number=float(person.number)IDL help,person,/structure创建结构体数组IDL se=replicate(person,10)IDL print,se se是10个personal署名结构体IDL dot=pixel,x:128,y:236,color:byte(3)IDL help,dot,/structure新的署名结构体IDL point1=pixel 引用IDL help,point1,/structure* Structure PIXEL, 3 tags, length=6, data length=5: X INT 0 Y INT 0 COLOR BYTE 0IDL point2=pixel,45,78,127IDL help,point2,/structure* Structure PIXEL, 3 tags, length=6, data length=5: X INT 45 Y INT 78 COLOR BYTE 1272、数组性质当需要获取关于数组性质的一些函数时,如数组元素数目,数组大小和类型,平均值等,需要用到如下函数:数组元素的数目n_elements(), 数组大小和类型 size(), 最小值 min(), 最大值max(), 平均值mean(), 方差variance(), 标准差stddev(), 总和total()这种类型占几个字节注:重点掌握size()函数IDL arr=findgen(256,256)IDL print,n_elements(arr) 返回元素个数IDL print,size(arr) 2 256 256 4 65536IDL print,size(arr,/n_dimensions) 返回是几维数组 2IDL print,size(arr,/dimensions) 256 256IDL print,size(arr,/type) 4IDL print,size(arr,/tname)FLOATDL print,size(arr,/n_elements) 65536类型代码大于3、数组元素的定位IDL arr=indgen(10)*10IDL print,arr 0 10 20 30 40 50 60 70 80 90IDL index=where(arr gt 35) ;EQ, NE, GE, GT, LE, LTIDL print,index 4 5 6 7 8 9(注意index是什么变量)IDL print,arr(index) 40 50 60 70 80 90IDL print,arr(index0) 404、简单数组函数:l Reform()函数Reform()函数可以使数组在固定元素个数的前提下,改变下标引用索引。显然Reform()函数可以改变数组的维数,例如:IDLa = Intarr(10,10,10)IDLc = Reform(a,200,5) (与下等价)IDLd = Reform(a,200,5) (与上等价)IDLe = Reform(a,200,50) (元素个数增多,错误)IDLe = Reform(a,20,5) (元素个数减少,错误)Reform()函数将在以下方面产生很好的应用效果;1、简化数组调用;2、进行数组索引动态调整,以便不同模式下的引用。l 数组重排列函数1、改变数组维数IDL arr=0,20,40,60,80,100IDL arr=reform(arr,3,2)IDL print,arr 0 20 40 60 80 1002、转换元素顺序IDL arr=indgen(5)IDL print,arr 0 1 2 3 4IDL print,reverse(arr)Compiled module: REVERSE. 4 3 2 1 0IDL arr=indgen(3,3)IDL print,arr 0 1 2 3 4 5 6 7 8IDL print,reverse(arr) 2 1 0 5 4 3 8 7 6IDL print,reverse(arr,1) 2 1 0 5 4 3 8 7 6IDL print,reverse(arr,2) 6 7 8 3 4 5 0 1 2注意reverse函数中1,2两个参数意味着什么3、旋转数组IDL arr=indgen(4,3)IDL print,arr 0 1 2 3 4 5 6 7 8 9 10 11IDL print,rotate(arr,1) 8 4 0 9 5 1 10 6 2 11 7 3IDL print,rotate(arr,2) 11 10 9 8 7 6 5 4 3 2 1 0IDL print,rotate(arr,3) 3 7 11 2 6 10 1 5 9 0 4 8注意rotate函数中1,2,3三个参数意味着什么4、转置数组TransposeIDL arr=indgen(4,3)IDL print,arr 0 1 2 3 4 5 6 7 8 9 10 11IDL print,transpose (arr) 5、练习练习1:分别建立字节型变量,16位有符号整型变量,浮点型变量,字符串。用HELP函数查看变量的属性。将字符串转变为字节型变量,将整型转换为字节型变量。练习2:IDLnum = 3 ; num是一个整型变量IDLnum = num*5.2 ; num变为一个浮点型变量如何使num在上式计算完毕后仍为整型变量。练习3:创建100100初始值为零的浮点型数组练习4:创建一个有100个元素的字节型矢量,初始数值为从0到99。思考元素个数超过256个时会有何变化。练习5:vector=FIndGen(10,10),print该变量第二行的前5个元素。练习6:(1)建立一个3列4行的浮点型数组,并将数组中的元素赋值如下: 1.00000 2.00000 3.00000 2.00000 4.00000 6.00000 3.00000 4.00000 5.00000 1.00000 8.00000 27.0000注,通过数组索引和矩阵运算来赋值(2)print出该数组中蓝色字体的元素。(3)用reform函数将上述数组变为一个1行的数组练习7:以student为名建立一个匿名结构体,结构体中包含两个变量,第一个变量为name,是一个1列3行的字符串矩阵,第二个变量为num,是一个1列3行的浮点型矩阵。接下来定义name为你的3个同学的名字,num为他们相应的电话号。查看你创建的结构体是否正确。练习8:建立一个数组,计算数组最大值,最小值,平均值练习9:如果想用size函数返回一个变量,如:a=size(arr),那么思考一下a的数据类型是什么?(四)数据的输入与输出在使用IDL处理数据时,经常需要输入一些数据,而且常常需要把处理后的数据输出。这就需要我们了解数据的标准输入、输出方法和数据的格式输入输出方法。1、 输入输出格式代码输入格式:READ, 变量1, , 变量n, FORMAT=(格式描述),PROMPT=提示信息输出格式:PRINT, 表达式1, , 表达式n, FORMAT=(格式描述)例子:IDLyear=0 & month=0 & day=0IDLREAD,year,month,day,PROMPT=请输入年月日,FORMAT=(I4,I2,I2)IDLPRINT,year,month,day,FORMAT=(I4,”/”,I2,”/”,I2) ;输出2010/05/19表1 IDL6.3的输入输出格式代码格 式 代 码格 式 含 义读几位读几次nAw输入w个字符(重复n次)若省略w,输出字符串中所有字符:若没有有效的变量,则终止输入输出$使用下一个输出数据输出到该输出数据所在行的后面(仅用于输出)nIwornIw.m输出w位十进制整数(其中在最右面的m位中的空格位置以0填充)nOwornOw.m输出w位八进制整数(其中在最右面的m位中的空格位置以0填充)nZwornZw.m输出w位十六进制整数(其中在最右面的m位中的空格位置以0填充)nFw.d输出w位单精度浮点数(其中小数位d位)nDw.d输出w位双精度浮点数(其中小数位d位)nEw.dornEw.dEe以指数形式(科学格式)输出w位浮点数(其中小数位d位,指数位e位)nGw.dornGw.dEe根据数据大小自动选择科学格式或者F,D格式输出Tn在当前行的第n列(约对位置)输出变量的值TLn从当前位置向左移动n列,然后输出变量的值TRn or nX从当前位置向右移动n列,然后输出变量的值/换行输出2、文件操作Openr 打开一个存在的文件并用于只读Openw 打开一个用于读写的文件,-存不存在都可以Openu 打开一个存在的文件并用于读写Findfile() 返回当前文件夹中的文件名Dialog_pickfile() 图形文件选择器,-对话框Fstat() 返回一个已打开文件的信息Eof()检测文件尾Close 关闭文件Free_lun释放逻辑设备号并关闭文件打开文件注意:逻辑设备号是IDL6.3允许使用的逻辑设备的编号。由于文件的读写操作是通过与该文件相关联的逻辑设备号来对该文件进行读写的,所以在对文件读写时,必须先打开文件,并且赋予以一个逻辑设备号。IDL6.3允许使用的逻辑设备号的范围为-2,-1,0,128;其中-2,-1,0分别用于标准错误、标准输出和标准输入;199为用户可以使用的逻辑设备号;100128为使用关键字/GET_LUN时,系统自动分配给文件的逻辑设备号。每一个打开过程都需要以一个逻辑设备号来引用文件。逻辑设备号是一个长整型标量,可以设置为199IDL lun=20lIDL openw,lun,test.dat但是,更好的方法是通过可选关键字get_lun来赋予自由逻辑设备号,自由逻辑设备号为100128IDL openw,lun,test.dat,/get_lun字母L关闭文件IDL lun=20lIDL openw,lun,test.datIDL close,lunIDLopenw,lun,test.dat,/get_lunIDL free_lun,lunIDL close,/all选择文件findfile()函数返回一个字符串数组IDL list=findfile()IDL print,list过滤数据IDL list=findfile(*.dat)图形文件选择器IDL file=dialog_pickfile()IDL file=dialog_pickfile(filter=*.dat)获取文件信息IDL file=filepath(hurric.dat,subdir=examplesdata)文件分配设备号IDL openr,lun,file,/get_lunIDLinfo=fstat(lun)IDL help,info.size,info.read, LONG = 149600 BYTE = 1 STRING = C:RSIIDL63examplesdatahurric.datIDL free_lun,lun打开后能看到内容3、读写有格式(ASCII)文件Readf 读文件Printf 写文件IDL file=dialog_pickfile()用动态分配数组的方式初始化一个矢量,一列15行IDL openr,lun,file,/get_lunIDL data=make_array(1,15,/string)读到data中IDL readf,lun,dataIDL print,dataIDL close,/all-156.9500, 20.7833, 399, 68, 64, 10, 60-116.9667, 33.9333, 692, 77, 50, 8, 270-104.2545, 32.3340, 1003, 87, 50, 10, 340-114.5225, 37.6073, 1333, 66, 35, 0, 0-106.9418, 47.3222, 811, 68, 57, 8, 140-94.7500, 31.2335, 90, 89, 73, 10, 250-73.6063, 43.3362, 100, 75, 64, 3, 180-117.1765, 32.7335, 4, 64, 62, 5, 200-116.0930, 44.8833, 1530, 55, 51, 0, 0-106.3722, 31.8067, 1206, 82, 57, 9, 10-93.2237, 30.1215, 4, 87, 77, 7, 260-109.6347, 32.8543, 968, 80, 46, 0, 0-76.0225, 43.9867, 99, 75, 66, 7, 190-93.1535, 36.2597, 415, 86, 71, 10, 310-118.7213, 34.7395, 1378, 71, 46, 5, 200IDL data=lindgen(10,100)IDL file=dialog_pickfile()IDL openw,lun,file,/get_lunIDL printf,lun,dataIDL close,/all4、读写无格式文件 读readu 写writeuIDL file=filepath(ctscan.dat,subdir=examplesdata) 找到文件位置 主路径:安装路径IDL openr,lun,file,/get_lun 只读IDL data=bytarr(256,256) 定义一个变量,是一个数组IDL readu,lun,data 读到dataIDL tv,dataIDL close,/all练习10:将data变量存储为一个无格式的数据文件。IDL data=dist(256)Compiled module: DIST.IDL file=dialog_pickfile()IDL openw,lun,file,/get_lunIDL writeu,lun,dataIDL close,/all给一个无格式数据加头文件IDL info=size(data)IDL print,info 2 256 256 4 65536IDL openw,lun,file,/get_lunIDL info_size=n_elements(info)IDL print,info_size 5IDL header=info_size,infoIDL printf,lun,headerIDL writeu,lun,data 区别在于printf能看到,不乱码IDL free_lun,lun练习11:读取上述文件中的头文件信息,用头文件中的信息来读取文件中的数据,并将该数据赋值给一个变量,显示该变量。实验二:IDL绘图目的:掌握IDL绘制线画图的方法;掌握IDL绘制曲面图和等值线的方法。原理:PLOT、OPLOT、Surface、Shade_surf、Contour的使用规则软件:IDL内容:(一) 绘制线画图1、 创建线画图生成线画图最简单的方法是绘出一个矢量。可以用LoadData命令打开时序数据集。它用来装载IDL的例程中所需的数据。打开并编译LoadData程序,键入如下语句以查看所能使用的数据集:IDLcurve=LoadData()另外一种选择第一个数据集的方法是,按如下方法使用LoadData: IDLcurve=LoadData(1) 要查看curve变量如何被定义,键入: IDLHelp, curve CURVE FLOAT =Array101将发现curve是一个具有101个元素的浮点矢量(或一维数组)。要绘出该矢量,可键入: IDLPlot, curveIDL试图用少量的信息尽可能地绘出漂亮的线画图。在这种情况下,x轴或水平轴被标识为从0到100,这与矢量中的元素个数相对应。而y轴或垂直轴则是用数据坐标来标识(它是取决于数据的坐标轴)。但大多数情况下,线画图用于显示一组数据(独立数据)相对另外一组数据(非独立数据)的关系。例如,上面的曲线可能代表在某段时间内采集数据的信号。可能需要绘制某个时刻的信号值。在这种情况下,需要一条与该曲线矢量具有相同元素个数的矢量(这样可以获得一一对应的相关性),并将该矢量转换为实验中所用的时间单位。例如,可以创建一个时间矢量,并绘出它与上述曲线矢量的关系图: IDLtime=FIndGen(101)*(6.0/100) IDLPlot, time, curveFIndGen命令创建一个元素值为0到100的共101个元素的矢量。乘法因子按比例缩小每个元素的大小,最后的结果是一个元素值为0到6之间的共101个元素的矢量。图形输出结果:独立数据(时间)与非独立数据(曲线)关系图注意,在此图中的坐标轴上没有相应的标题。在图上设置标题是很容易的,只要用XTitle和YTitle关键字即可实现。例如,为此曲线图加标题,可键入: IDLPlot, time, curve, XTitle=Time Axis, $ YTitle=Signal Strength 甚至可以用Title关键字对整个图形设置标题,键入: IDLPlot,time,curve,XTitle=Time Axis,$ YTitle=Signal Strengh,Title=Experiment 35M输出结果:简单的带坐标轴标题和图形标题的线画图注意,图形显示可以根据需要改成在白色背景下的黑线图,而上图显示为在黑色背景下的白线。将系统变量的背景与前景色更改即可。IDL !P.BACKGROUND=FFFFFFXLIDL !P.COLOR=000000XLIDLplot,time,curve 注意,图形标题稍微大于坐标轴的标题。事实上,是1.25倍的关系。可以用CharSize关键字改变所有图形注记的大小。例如,可以将坐标轴标题的字符放大50%: IDLPlot, time, curve, XTitle=Time Axis,$ YTitle=Signal Strength, Title=Experiment 35M, $ CharSize=1.5 甚至可以用XYZCharSize关键字单独改变每个轴的标识字符的大小。例如,如果想使Y轴的注记比X轴的大两倍,则可键入: IDLPlot,time,curve,XTitle=Time Axis,XCharSize=1.0,$ YTitle=Signal Strength,YCharSize=2.02、 定制线画图上面是简单的线画图,除了数据本身外,没有很多其他信息。然而,有许多方法可用来定制和标注线画图。Plot函数可以被50多种不同的关键字修饰。1. 改变线型或粗细;2. 使用符号,符号之间可以有线条和没有线条存在;3. 改变刻度标记的长度或刻度标记之间的间隔;4. 改变绘图范围来绘出感兴趣的数据段;5. 删除坐标轴或改变绘图方式。改变线条的线型和粗细 例如,想用不同的线型画出数据。如画一条线型为长虚线的线条,可以这样实现: IDLPlot, time, curve, LineStyle=5 !P.BACKGROUND=FFFFFFXL!P.COLOR=000000XL Plot, time, curve 对于线画图来说,可通过LineStyle关键字选用下表中列出的索引号确定不同的线型。例如,想使用虚线画出曲线,可以把LineStyle关键字的值设置为2:IDLPlot, time, curve, LineStyle=2LineStyle关键字不同索引号对应的线型索引号线型0实线1点线2虚线3划点线4划点点线5长虚线 线画图中线的粗细同样能够被改变。例如,如果想使用比正常值粗3倍的虚线来显示图形,可键入: IDLPlot, time, curve, LineStyle=2, Thick=3用符号代替线条表示数据 假如想用符号代替线条表示数据,就像LineStyle关键字一样,也存在类似的索引号供选择,以确定不同的线画图符号。下表给出了能通过PSym(绘图符号)关键字来选择的索引号。例如,可以通过设置PSym为2,用星号来绘图,如下: IDLplot, time, curve, Psym=2 输出的图形:用符号而不是线条来显示线画图PSym关键字的引用在绘图中使用不同的符号。注意,绘图符号为负值时表示用线条来连接相应的符号索引号绘图符号0无符号,通过线条连接点1加号2星号3点4菱形5三角形6方形7X8用户自定义符号(用UserSym过程来定义)9未用10直方图-PSym负值表示用线条连接相应的符号用线条和符号来显示数据 赋予PSym关键字一个负值就可以用线条将图形符号连接起来。例如,可用实线与三角形符号绘出数据,键入: IDLPlot, time, curve, PSym=-5 为创建一个更大的符号,可用SymSize关键字。下面的语句画出的符号为正常的两倍。符号值为4时符号的大小为正常值的4倍,依此类推。 IDLPlot, time, curve, PSym=-5, SymSize=2.0限定线画图的范围 并非所有的数据都必须在一个线画图中绘出,可以用关键字限定绘图的数据量。例如,可仅绘出位于X轴上2至4之间的数据,键入: IDLPlot, time, curve, XRange=2, 4 或者仅绘出Y值在10至20之间,X值在2至4之间的部分数据图形,键入: IDLPlot, time, curve, YRange=10, 20, XRange=2, 4 也可以通过给定关键字数据范围来反转数据的方向。例如,可将Y轴的0点设置为图形的顶端,如下: IDLPlot, time, curve, YRange=30, 0如果所选择的轴的范围不适合IDL关于坐标轴美观标记的规定,IDL将忽略所要求的范围

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论