Basic IDL knowledge ).

Slides:



Advertisements
Similar presentations
第六 章数据库访问页 6.1 数据访问页视图 6.2 创建数据访问页 6.3 编辑数据访问页 6.4 查看数据访问页 退出.
Advertisements

Tool Command Language --11级ACM班 金天行.
第三章 数据类型和数据操作 对海量数据进行有效的处理、存储和管理 3.1 数据类型 数据源 数据量 数据结构
Oracle数据库 Oracle 子程序.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
在PHP和MYSQL中实现完美的中文显示
Hadoop I/O By ShiChaojie.
EBNF 请用扩展的 BNF 描述 C语言里语句的结构; 请用扩展的 BNF 描述 C++语言里类声明的结构;
第八章 菜单设计 §8.1 Visual FoxPro 系统菜单 §8.2 为自己的程序添加菜单 §8.3 创建快捷菜单.
王志成 航天星图科技(北京)有限公司 使用IDL进行科学数据可视化 王志成 航天星图科技(北京)有限公司.
C 語言簡介 - 2.
IDL程序1 基础语法与数据处理 授课人:李景刚 手机:
走进编程 程序的顺序结构(二).
辅导课程六.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
重點 資料結構之選定會影響演算法 選擇對的資料結構讓您上天堂 程式.
第二章 Java语言基础.
第四章 附件 (应用程序软件包).
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
第七章 操作符重载 胡昊 南京大学计算机系软件所.
SOA – Experiment 2: Query Classification Web Service
第一章 函数与极限.
第4章 PHP流程控制语句.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
1.3 C语言的语句和关键字 一、C语言的语句 与其它高级语言一样,C语言也是利用函数体中的可执行 语句,向计算机系统发出操作命令。按照语句功能或构成的不 同,可将C语言的语句分为五类。 goto, return.
C语言程序设计 主讲教师:陆幼利.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
学习目标 1、什么是字符集 2、字符集四个级别 3、如何选择字符集.
产品推广 PRODUCT PROMOTION PRESENTED BY OfficePLUS.
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
VisComposer 2019/4/17.
VB与Access数据库的连接.
姚金宇 MIT SCHEME 使用说明 姚金宇
实验七 安全FTP服务器实验 2019/4/28.
POWERPOINT TEMPLATE PRESENTED BY OfficePLUS.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
C语言程序设计 第一章 数据类型, 运算符与表达式 第二章 顺序程序设计 第三章 选择结构程序设计 第四章 循环控制 第五章 数组.
项目二:HTML语言基础.
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第六章 Excel的应用 一、Excel的单元格与区域 1、单元格:H8, D7, IV26等 2、区域:H2..D8, HS98:IT77
第4章 Excel电子表格制作软件 4.4 函数(一).
第九节 赋值运算符和赋值表达式.
3.16 枚举算法及其程序实现 ——数组的作用.
_13简单的GDI绘图操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
本节内容 文件系统 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Chapter 18 使用GRASP的对象设计示例.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
Visual Basic程序设计 第13章 访问数据库
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Python 环境搭建 基于Anaconda和VSCode.
第六章 Excel的应用 五、EXCEL的数据库功能 1、Excel的数据库及其结构 2、Excel下的数据排序 (1)Excel的字段名行
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
数据表示 第 2 讲.
第8章 创建与使用图块 将一个或多个单一的实体对象整合为一个对象,这个对象就是图块。图块中的各实体可以具有各自的图层、线性、颜色等特征。在应用时,图块作为一个独立的、完整的对象进行操作,可以根据需要按一定比例和角度将图块插入到需要的位置。 2019/6/30.
WEB程序设计技术 数据库操作.
第三节 数量积 向量积 混合积 一、向量的数量积 二、向量的向量积 三、向量的混合积 四、小结 思考题.
第四章 UNIX文件系统.
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
顺序结构程序设计 ——关于“字符串”和数值.
LOGO HERE 单击此处添加 您的标题标题标题 PRESENTED BY JANE DOE
When using opening and closing presentation slides, use the masterbrand logo at the correct size and in the right position. This slide meets both needs.
Presentation transcript:

Basic IDL knowledge )

Why using IDL? 1. What is IDL? IDL(Interactive Data Language,交互式数据语言)是进行交互数据分析和可视化应用工程跨平台开发 http://www.ittvis.com/ProductServices/IDL.aspx Why using IDL? 1.矩阵处理 2. 图形显示 3. 非常多的程序包(SSW,CDALIB等)

执行方式 命令交互式 2. 程序执行

IDL的帮助系统 1.查看帮助文件 2. 命令帮助

IDL程序特点 ——宽松的语法检查机制 分隔符为“,”,而非空格 不分大小写 变量无需事先说明

2. IDL 基本知识

2.1 Quick Look of IDL IDL常用命令 .complile [filename1, filename2,….] compile files from 1 to n .run [filename1, filename2,….] compile and run the compiled program(只运行主程序) .rnew [filename1, filename2,….] the same as .run, but free all the variants before running, except for the common blocks (只运行主程序) .go run the compiled program .out continues executing statements in the current program until it returns .reset_session 初始化IDL系统,使其返回到I DL启动后的初始状态 8

IDL file commad cd [, path] [current=variant] file_mkdir, dirname file_copy,file_delete,file_move spawn [, command]

建立主程序 filename:“main.pro” 内容 command1 command2 end

IDL的过程和运行 过程是IDL中使用最多的程序方式。过程文件的扩展名为.pro。其文件内容格式如下: pro 过程名,参数1,参数2….参数n,关键字1….关键字n 命令序列 end 例:hello.pro

参数和关键字 参数有确定的顺序和类型,且一般是必须的 关键字没有确定的顺序,但是有确定的类型,一般为可选的 例: par_keyword.pro

PLOT, [X,] Y [, /ISOTROPIC] [, MAX_VALUE=value] [, MIN_VALUE=value] [, NSUM=value] [, /POLAR] [, THICK=value] [, /XLOG] [, /YLOG] [, /YNOZERO]

IDL的函数和调用 函数与过程的格式和用法非常类似,其最大不同是函数要返回一个函数值。函数文件的 扩展名也为*.pro。函数内容的格式如下: Fucntion 函数名,[参数1……参数n],[关键字1……关键字n] 函数的调用格式 par=函数名([参数1……参数n],[关键字1……关键字n]) 例:func_example.pro

过程文件的说明文档 ;+ 以;+开始 ; PURPOSE: ; give the day of year for a given date ;+ 以;+开始 ; PURPOSE: ; give the day of year for a given date ; ; CATEGORY: ; time ;- 以;-结束 function doy,date return,mjd2doy(anytim(date,/mjd)) end 对过程或者函数的目的、 调用方法、修改记录等信息加以说明。以;开始

一个 完整的IDL应用系统 主程序 包含配置文件 过程1 过程2 函数2 过程21 过程22 过程3 函数1

2.2 IDL数据 变量及其属性

常用的系统变量 !dpi (3.1415926) & !pi !dtor: value used to convert degrees to radians(π/180) !d (device,对设备进行控制) !map:the information needed to effect coordinate conversions between points of latitude and longitude and map coordinates. !p 控制显示 如:!p.font, !p.color !path:系统路径 !radeg :used to convert radians to degrees (180/π). !version !values

http://idlastro. gsfc. nasa http://idlastro.gsfc.nasa.gov/idl_html_help/IDL_Environment_System_Variables.html

整型为短整型,注意使用L 思考题:计算 -10000*1000? 变量的属性是动态改变的

字符串常用函数 systime():获得系统时间 strlen(array):获得字符串长度 strcompress(array):去掉单词之间多余的空格 strupcase(array):把所有字母变成大写或小写 strlowcase(array): 把所有字母变成小写 strmid(array,n1,n):返回array中从第n1个字符开始的n个字符 strtrim():去掉array中前部或者尾部的空格。

数组 IDL是面向矩阵的语言,几乎所有运算都可以在数组上使用。 数组表达:array[n,m] 表示n列m行(与其他语言有别),按行排列, 0为下标起点 n a00 a10 a20 a30 a01 a11 a21 a31 a02 a12 a22 a32 m

数组常用函数:

数组引用:array[subscript],或(array)[subscript] 下标语法:e、e0:e1、e:*、*、array。 array=make_array(10,10,/integer),sub=indgen(12) 合法的下标表示:array[5,5]、array[2:3,5]、array[*,4]、array[*,5:8]、array[4,4:*]、array[sub]、array[[1,3,5],7:9]

常数的数组表示:var=5,则var[0]=5(合法!) 常用的关于数组的函数 reform():array[4,4:*]为1列6行(列向量), reform(array[4,4:*])则为6列1行(行向量) 常数的数组表示:var=5,则var[0]=5(合法!)

赋值:array[[2, 4, 6],5]=[4, 16, 36] where():返回满足指定条件的数组元素的下标组成的 一维数组。 ARRAY_INDICES():把一维的下标转换成多维数组的 多维下标 例:test_where.pro

n_elements(): 输出数组中元素的个数 size:输出数组的大小和类型信息 max:输出数组中的最大值 用法:max(array,min=xy) min:输出数组中的最小值 n_elements(): 输出数组中元素的个数 size:输出数组的大小和类型信息 数据类型 维数 每维元素的个数 元素个数 sort():返回对数据升序排序后下标组成的数组

其它常用的数组函数 rebin():改变数据维数和大小(整数乘或除原数组维度) Result = REBIN( Array, D1 [, ..., D8] ) congrid():改变数组维数和大小(任意) expand():2D数组维度改变(类似rebin,congrid) reverse():矩阵转换1D数组的顺序 uniq(), sort(), transpose() 思考:查看IDL帮助,写出以上函数的作用及用法?

结构 类型及定义 一种复合变量,它可以将多种类型的数据存储在一个变量中,对于表示意义相关的数据、程序间交换数据均非常有意义。 命名结构:dot={PIXEL ,x:128 ,y:236 ,color:bytarr(3)} 定义后可使用PIXEL定义其他结构 dot1={PIXEL ,x:58 ,y:46 ,color:[255,0,255]}、 dot2={PIXEL ,58 ,46 ,[255,0,255]}、dot3= {PIXEL} 匿名结构:person={name:’jack’,id:123456L} 定义后无固定结构,可任意改变 person={name:’jack’ ,id:123456L ,phone:’123-4567’}

引用 变量引用:使用变量名或变量在结构中的位置索引。 如:dot.x或dot.(0) 数组变量:s={arr:indgen(10)}, 结构中的变量的类型和(数组)大小 结构定义后,各变量的数据类型以及数组变量的维数均不可改变。当使用中出现不一致时向原类型转换,不能转换时报错。

结构继承 dot3d={POINT ,INHERITS PIXEL ,z:0} 常用函数 creat_struct():创建结构体 n_tags():检测结构成员的个数 tag_names():检测结构成员的名字

help: 查看数据属性的函数

结构数组 定义:dotarr=replicate({PIXEL} ,10),或dotarr=replicate(dot ,10) 引用:dotarr[1].x=10、 dotarr.x=10将所有结构的x赋值为10 dotarr.y=indgen(10)

reade6_$file only_8_bit name.last third%file 变量命名规则 1. 变量是指在程序运行过程中其值可以发生变化的数据 2.变量名的命名规则是:变量名由英文字母、数字、下划线和符号$组成,而且必须以英文字母开头,长度最多不超过128个,中间不能有空格 3.变量名不能是系统内部用于特殊用途的保留字的名称。 思考题:下列文件名中哪些是错误的? reade6_$file only_8_bit name.last third%file ComputerType 4th_list $temp _day_of_year

IDL保留字

IDL表达式

2.3 数据的输入和输出 2.3.1.数据的标准输入和输出 输出:print,[表达式1,表达式2] 输入:read,变量1,变量2 [,prompt=‘提示信息’] 程序暂停,按照提示信息等待从键盘输入 (1)默认变量类型为浮点数,如果要按照指定类型输入,需要提前把变量初始化为相应的类型。 (2)输入的数据之间用逗号、空格或者Tab隔开,或者回车换行后依次输入 (3)对于字符型数据,则读入当前行的所有字符,直到回车 (4) 对于复数数据,必须有虚部和实部两部分,以逗号隔开 ,并用括号括起来

输出:print,表达式1,表达式2,……,format=‘(格式描述)’ 2.3.2 数据文件的格式输入和输出 输出:print,表达式1,表达式2,……,format=‘(格式描述)’ 格式描述的使用规则: (1)若格式代码多余输出的变量,则从左至右使用格式代码,多余 的代码无效。 (2)若格式代码少于输出的变量,则向左至右使用格式代码,用完 后则从头开始使用,且输出的结果将换行输出。 (3)格式描述中的字符串需要用双引号引起来。 (4)对于I,F,G,D,E和G格式,若输出宽度少于实际数据,则输出一串 ‘*****’以示数据溢出。

输入1:Read,变量1,….,format=‘(格式描述)’[,prompt=‘提示信息’] 输入2:Reads,字符变量,变量1,变量2,….,format=‘(格式描述)’ 按照描述的格式从字符变量中读取数据

2.3.3 数据的文件格式输入和输出 文件的基本操作 filepath(‘文件名’,root_dir=‘字符型变量1’,subdir=‘字符型 变量2’):返回由字符型变量1,字符型变量2和文件名组成的 完整路径 findfile(‘文件名描述’):返回满足文件名描述文件的所有文件 dialog_pickfile():以对话窗口的方式进行交互式的选择一个或者 多个文件(/MULTIPLE_FILES)

-2,-1,0,1,………..99,100,…..128 IDL中对文件的读写操作是通过与该文件相关联的逻辑设备号 来进行的。在读写文件的时,必须先打开文件,并赋以一个逻辑设备号。 IDL中可用的逻辑设备号: -2,-1,0,1,………..99,100,…..128 get_lun,变量 free_lun,变量(非常重要) openr,变量1,’文件名’,/get_lun(openr,设备号,’文件名’) 以只读形式打开已存在的文件 openw,’变量1’,’文件名’,/get_lun (openw,设备号,’文件名’) 以读写形式打开已存在的文件 close,变量1,***** (非常重要) eof(设别号变量): 判断设备号变量所对应的指针是否在文件尾。 若是返回1,否则返回0 -2:标准错误 -1:标准输出 0:标准输入 用户可使用的逻辑设备号 使用 get_lun系统自动分配给文件的逻辑设备号

数据的文件格式输入 输入:readf,设备号,变量1,变量2,……,format=‘(格式描述)’ readu:设备号,变量1,变量2,…..(无格式二进制文件) 输出:printf:设备号,变量1,变量2,……,format=‘(格式描述)’ writeu:设备号,变量1,变量2,…..

2.4 程序设计 2.4.1 程序设计的基本结构 A:顺序结构 B:选择结构 C:循环结构 条件表达式 语句序列 Y N 条件表达式 语句序列1 语句序列2 语句序列3 Y N 条件表达式 条件表达式 语句序列1 语句序列2 Y N 语句序列

IF语句 2.4.2 程序设计的选择控制 If 表达式 then 语句1 else 语句2 (2) If 表达式 then begin 语句序列1 endif else begin 语句序列2 endelse (3)If语句的嵌套

CASE语句 SWITCH语句 执行满足条件的表达式后的语句 只执行满足条件的表达式中的语句 Case 表达式 of swith表达式 of 表达式1: begin 语句序列1 end 表达式2: 语句序列2 . 表达式n: begin 语句序列n else: begin 语句序列n+1 endcase swith表达式 of 表达式1: begin 语句序列1 end 表达式2: 语句序列2 . 表达式n: begin 语句序列n else: begin 语句序列n+1 endswitch 执行满足条件的表达式后的语句 只执行满足条件的表达式中的语句

case 2 of 1: print, 'one' 2: print, 'two' 3: print, 'three' 4: print, 'four' endcase IDL results: two switch 2 of 1: print, 'one' 2: print, 'two' 3: print, 'three' 4: print, 'four' endswitch IDL results: two three four

2.4.3 程序设计的循环控制 WHILE语句 Continue语句 Break语句 while 表达式 do 语句 while 表达式 do begin 语句序列A endwhile 根据表达式的值循环执行A若干次 Continue语句 用于终止本次循环,转向while进行下一次循环 Break语句 用于无条件退出包含break语句的最内层的循环

FOR语句 REPEAT语句 (1) For 变量=初值,终止,步长 do 语句 (2) For变量=初值,终止,步长 do begin endfor 用变量来空间循环次数,是语句序列A循环执行指定的次数 REPEAT语句 (1)Repeat 语句 until 表达式 (2) Repeat begin 语句序列A endrep until 表达式 循环执行语句序列若干次,直到表达式的值为真,结束循环

Goto 语句 程序的执行无条件转向标号所指定的语句 Goto语句只能从循环语句的循环体中转到循环语句的外面, 反之则不允许 pro example_goto for i=0,10 do begin print,i if I eq 8 then begin no=i goto,jump endif endfor Jump: print,'goto here',no end

2.5 IDL的图形系统 一:图形系统概述 ●图形系统:IDL提供两种图形系统:直接图形系统和对象图形系统。 win 微软Windows x X Windows(unix,linux,mac os) ps 文件 ●对象图形系统:首先利用对象引导程序创建用于显示的图形窗口对象,然后在窗口对象中进行数据显示的图形系统。对象图形系统不直接依赖于用户使用的图形设备,所以使用对象图形系统设计的应用系统,可以直接运行在各种计算机系统中,而且不需要进行图形设备的设置,同时还可以重复利用。缺点是显示速度比直接图形系统稍慢。

选择图形显示设备 set_plot,’设备代码’ 常用的设别代码:win, x, ps 例1:set_plot,‘ps’ !d.name当前设备名 device,……… 设置当前图形显示设备的属性 常用的参数: decomposed=0|1 设置显示模式为8为伪彩色或24位真彩色 retain=0|1|2 设置备份存储模式,及当前窗口被改变或者被刷新是是否备份。0表示不备份,1表示由系统备份,2表示由IDL备份。(win,x) close /close_file关闭文件(ps)

◆GET_DECOMPOSED=变量:获取当前设备的显示模式,并放入变量中。 ◆GET_SCREEN_SIZE=变量:获取当前设备的分辨率,并放入变量中。 ◆GET_VISUAL_DEPTH=变量:获取当前设备的颜色深度,并放入变量中。 ◆GET_VISUAL_NAME=变量:获取当前设备显示模式名称,放入变量中。 ◆SET_FONT=‘字体变量’:设置字体。字体变量是字体名称。 如:IDL>DEVICE, SET_FONT='Times New Roman’ ◆SET_CHARACTER_SIZE=[字体变量, 行间距]:设置字体大小和行间距。 如:IDL>DEVICE, SET_CHARACTER_SIZE=[10, 12] ◆FILENAME=文件名:创建一个输出文件。

矢量图形系统 例: dname=!d.name;获得系统的当前设置 set_plot,‘ps’ . device,/close set_plot,dname;恢复系统设置(重要)

Set_Plot, ‘PS’ Device, filename=‘test.eps’, XSize=xs, YSize=ys, XOffset=xoff, YOffset=yoff, /Landscape,/color

窗口图形系统 窗口的建立 window[,窗口索引变量][,retain=0|1|2] [,title=‘标题变量’][,xsize=xsize][,ysize=ysize] [,xpos=xpos][,ypos=ypos][,/free][,/pixmap] 建立一个指定属性的窗口 窗口索引变量:IDL可以允许同时打开128个窗口。 其中用户可以指定索引号1-31,其它索引号需要加 参数free建立。当前窗口的索引号存放在系统变量 !d.window中。 pixmap:创建位于内存的不可见窗口 例: set_window.pro

2. wset[,窗口索引号] 把窗口指引变量指定的窗口设置为当前窗口 例:wset,0 3. erase[,背景颜色变量][,color=背景颜色变量] 使用背景颜色变量指定的颜色清除当前窗口的内容 例:erase erase,255 4. wshow[,窗口索引变量][,0|1][,/iconic] 显示窗口索引变量指定窗口,即把该窗口置于最前 注意:wshow只是显示指定窗口,并不把该窗口设为当前窗口 例:wshow,1 5. wdelete[,窗口索引变量] 删除窗口索引变量指定的窗口,并释放其所占的内存 例:wdelete,0

二:坐标系统(win,ps,x) 数据坐标系统 设备坐标系统 归一化坐标系统 Data coordinate 499 1 Data coordinate Device coordinate Normalized coordinate 499 1

三:显示模式和颜色表 

●显示模式: 根据显示器类型,用户可以选择不同的显示模式。 ●显示器:单色显示器 和 彩色显示器。 单色显示器:由于它只能以不同的灰度级(28=255级)显示一种颜色,所以RGB彩色信息需要转换成灰度信息才能显示。具体转换方法为: xij = 0.29900 * R ij + 0.58700 * G ij + 0.11400 * B ij 。 其中:xij∈{0,1,…,255} (i∈{1,2,…,m}, j∈{1,2,…,n},m×n为显示器的分辨率)表示每个象素的灰度值;R ij ,G ij ,B ij分别表示每个象素的红、绿、兰颜色分量值。 彩色显示器:由于每个象素的颜色是红(R)、绿(G)、兰(B)三种颜色的合成色,而RGB又分别有256级(即28),所以它可以显示16777216(256×256×256)种颜色。 因此:彩色显示器:既可以使用彩色模式(即真彩),又可以使用单色(灰度)模式(即伪彩)显示灰度图形图像。

单色显示:以不同的灰度级别进行显示 彩色显示:可以以彩色模式显示彩色图像,也可以 以单色(灰度)模式显示(伪彩)灰度 8位模式:以 256(2^8)种颜色来创建数据的图形显示 模式。该模式下需要引入颜色表。 24为模式:用R、G、B三种颜色的合成色的16777216(256x256x256)种颜色来创建数据。

●颜色表:是由索引表和颜色列表组成。显示对象的每一个像素分别对应索引表中的一个索引值(范围:0~255),由该索引值再在颜色列表中找到一组相应的颜色,最后利用这一组颜色的合成色显示该像素。8位模式的示意图如图 IDL提供了 41种颜色表,可用不带参数的LOADCT命令装入指定的颜色表。 LOADCT, 20

默认颜色表 颜色表示例

装入颜色表 loadct ,[颜色表索引变量] 装入制定颜色表文件的制定颜色表 xloadct:以交互方式装入或修改 颜色表文件中的指定颜色表

●例如: DEVICE, DECOMPOSED=0 LOADCT, 25 SURFACE, DIST(80) LOADCT, 26 LOADCT, 30 XLOADCT, /BLOCK

在8位显示模式下,IDL默认的windows窗口是黑背景白线条(如下左图所示),怎么把它改为白背景黑线条(如下右图所示)? 思考题: 在8位显示模式下,IDL默认的windows窗口是黑背景白线条(如下左图所示),怎么把它改为白背景黑线条(如下右图所示)? Plot, a, color=255, background=0 Plot, a, color=0, background=255 前提:loadct, 0 (黑白的颜色表)

fsc_color:获取指定颜色的代码(88种颜色) 使用方法:plot,[1,2,3],color=fsc_color(‘red’) 关于颜色的程序库 fsc_color:获取指定颜色的代码(88种颜色) 使用方法:plot,[1,2,3],color=fsc_color(‘red’) 例:fsc_color.pro D Fanning的程序库 http://www.dfanning.com/ $ssw/packages/nrl/id/nrlgen/dfanning 70

建立自己的颜色表 pro mycolortable ;;; r g b ;;; blue = ( 0 0 255) ;;; white= ( 255 255 255) ;;; red = ( 255 0 0) ;; Thus want a blue-white-red table than needs; ;; the r from 0-> 255 -> 255 ;; g from 0-> 255 -> 0 ;; b from 255->255->0 steps = 128 scaleFactor = FINDGEN(steps) / (steps - 1) ; Do first 128 colors ( blue to white). ; Red vector: 0 -> 255 redVector = 0 + (255 - 0) * scaleFactor ; Green vector: 0 -> 255 greenVector = 0 + (255 - 0) * scaleFactor ; Blue vector: 255 -> 255 blueVector = 255 + (0 - 0) * scaleFactor

; Do second 128 colors (white to red). ; Red vector: 255 -> 255 redVector = [redVector, 255 + (0 - 0) * scaleFactor] ; Green vector: 255 -> 0 greenVector = [greenVector, 255 + (0 - 255) * scaleFactor] ; Blue vector: 255 -> 0 blueVector = [blueVector, 255 + (0 - 255) * scaleFactor] save, redVector, greenVector, blueVector, filename='mycolortb.sav', description='blue-white-red table' end

2.6 数据可视化 常用的画图命令 常用的关键字 color:颜色 /noerase:保留原有内容 1.Plot,[x,]y[,关键字] 在当前窗口中按照指定的格式绘制直线或者曲线。如果当前窗口不存在,则按照默认设置创建一个默认窗口。 常用的关键字 color:颜色 /noerase:保留原有内容 /ylog,/xlog:创建对数坐标轴 /polar:绘制极坐标下的线 Thick:线的粗细 Linestyle:线的种类 Psym:以指定符号显示 position:画图的位置 [X|Y]style:坐标轴属性

linstyle=[0|1|2|3|4|5] 例:show_linestyle.pro

PSYM Symsize: 符号大小 例:show_psym.pro

Psym=-1

自定义符号(psym=8) Filled Circle Filled Triangles phi = Findgen(32) * (!PI * 2 / 32.) phi = [ phi, phi[0] ] UserSym, Cos(phi), Sin(phi), /Fill Plot, data, PSym=8, Symsize=1.25 Filled Triangles UserSym, [ -1, 1, -1, -1 ], [1, 0, -1, 1 ], /Fill ; Filled right-facing triangle. UserSym, [ 1, -1, 1, 1 ], [1, 0, -1, 1 ], /Fill ; Filled left-facing triangle. UserSym, [ -1, 1, -1, -1 ], [1, 0, -1, 1 ] ; Open right-facing triangle.

Psym=10 plot,findgen(10),psym=10

Position=[x1,y1,x2,y2] 默认为归一化坐标系统,可选为设备坐标系, 不能为数据坐标 1

[X|Y]Style 例: example_xysytle.pro (only xstyle) 思考题: Ystyle=5|10分别代表什么?那些数字对应的style是相同的?

技巧: {X | Y | Z}STYLE设定的值可以以加的形式出现,来实现多重功能。 如:YSTYLE=1+8

2.Plots 在当前窗口中,按照指定的格式在多个坐标系中绘制直线或者曲线(不建立坐标轴) 3.Axis[,X[,Y[,Z]]][,xaxis=0|1] [,yaxis=0|1] [,zaxis=0|1] 在当前窗口中绘制任意格式的坐标轴 例:example_axis.pro

4. Xyouts,[x,y,]String 按照指定的位置输出文本内容的值 常用的关键字 Alignment=value{0.0-1.0}:设置输出的文本的对齐方式。Alignment=0 左对齐 =0.5 居中 =1 右对齐 Orientation=ccw_degrees_from_horiz:输出文本的倾斜程度 可选数据坐标系统(/data),设别坐标系统(/device),正交坐标系统(/norm) 例:example_xyouts.pro

XYOUTS示例

5. Cursor 鼠标交互应用 ● 交互获取鼠标的当前位置 CURSOR, X, Y , /DEVICE, /DOWN ●例 在绘图窗口中,实现绘制折线的绘图功能,且鼠标右键结束绘制。 PRO test ERASE ; 生成默认绘图窗口 ; 获取正交坐标系的初始采样点 CURSOR, X, Y, /NORMAL, /DOWN ; 获取正交坐标系的第二个采样点,直到鼠标右键按下,结束绘制 ; 把第二个采样点赋值给初始采样点 WHILE (!MOUSE.button NE 4) DO BEGIN CURSOR, X1, Y1, /NORM, /DOWN & PLOTS,[X,X1], [Y,Y1], /NORMAL X = X1 & Y = Y1 ENDWHILE END

●例 在给定图形中,定位系列列一点,并在图上打印该点的坐标值。 Pro test !p.color=255 !p.background=0 a=findgen(100)/99.*2*!pi Plot, a, sin(a) ; 利用鼠标取点 cursor,x,y,/data WHILE (!MOUSE.button NE 4) DO BEGIN Xyouts,x,y,strcompress(string(x),/remove_all)+'+'+strcompress(string(y),/remove_all) ENDWHILE end

IDL中的不同字体和字体属性 !3 选择单一的罗马字 !4 选择单一希腊字 !6 选择复杂罗马字 !X 恢复到起始字体 !C 开始新的行 !3 选择单一的罗马字 !4 选择单一希腊字 !6 选择复杂罗马字 !X 恢复到起始字体 !C 开始新的行 !E 上标模式 !I 下标模式 !D 开始下标,后面跟下标的内容 !U 开始上标,后面跟上标的内容 !N 结束上标或者下标,开始正常字体 例:showfont.pro 87

在字体表中给出的符号位置为8进制。如“+”,对应的8进制数为4×10+13=53,转化为10进制为43 (技巧:在idl中用命令 help, “53 可以查看8进制数字对应的10进制数字)。 然后查找键盘编码表,找到43对应键盘字符为“+”,那么可以在相应idl输出中输出该字符。 比如如何在idl输出△ ? 104o -> 68 (十进制)-> D idl中用‘!4D’ 表示即可

例如:分析如下命令的运行结果。XYOUTS,0,0.2,'!MI!S!A!E!8x!R!B!Ip!N !7q!Ii!N!8U!S!E2!R!Ii!Ndx',SIZE=3,/NORMAL !MI :Changes to the math set and draws the integral sign, uppercase I. (等效!9I) !S :Saves the current position on the position stack. !A!E!8x :Shifts above the division line and to the exponent level, switches to the Complex Italic font (Font 8), and draws the " x." !R!B!Ip : Restores the position to the position immediately after the integral sign, shifts below the division line to the index level, and draws the " p." !N !7q :Returns to the normal level, advances one space, shifts to the Complex Greek font (Font 7), and draws the Greek letter rho, which is designated by "q" in this set. !Ii!N :Shifts to the index level and draws the " i " at the index level. Returns to the normal level. !8U : Shifts to the Complex Italic font (Font 8) and outputs the upper case " U." !S!E2 : Saves the position and draws the exponent " 2." !R!Ii :Restores the position and draws the index " i." !N dx :Returns to the normal level and outputs " dx."

lhs = '!8f(x!S!Ii!R , x!S!Ij!R ) = !X' XYOUTS, 0.1, 0.5, lhs, WIDTH = lhs_width, CHARSIZE = 2., /NORMAL rhs = '!8!S!Af(x!S!Ii!R ) - f(x!S!Ij!R )!R!B x!S!Ii!R - $    x!S!Ij!R !X' XYOUTS, 0.1 + lhs_width, 0.5, rhs, CHARSIZE = 2., $    WIDTH = rhs_width, /NORMAL PLOTS, [0.1 + lhs_width, 0.1 + lhs_width + rhs_width], $    [0.51, 0.51], /NORMAL 使用 Textoidl程序包: XYOUTS,0,0.2, textoidl( ‘\int_{p}^{x}\rho_{i}U_{i}^{2}dx’), SIZE=3,/NORMAL XYOUTS, 0.5,0.7, '!9I!3'+textoidl('_{p}^{x}\rho_{i}U_{i}^{2}dx'),size=5

设备字体 例:example_device_font.pro

C_annotation:设置轮廓线上的文本标注内容 Levels:设置每一层轮廓所对应的值的数组 4. Contour,Z[,X,Y] 绘制任意格式的等值线图 常用的参数: C_annotation:设置轮廓线上的文本标注内容 Levels:设置每一层轮廓所对应的值的数组 Nlevels:设置绘制轮廓线的层数(最大值60) 如果设置了levels,改值无效 /fill:使用填充的方式绘制轮廓 Path_xy:获得等值线的坐标 Path_info:获得等值线的路径信息 例:example_contour.pro

Contour Levels:

Contour Labels:

Contour Fill: 注意:idl并不提供colorbar,需要你根据你数据level,z值范围,以及bar的位置来自行确定。

2.7 科学数据类型 IDL 直接提供: - NetCDF - HDF - CDF 第三方提供IDL库函数: - FITS

NetCDF

HDF

获取HDF数据文件ID和变量信息

获取HDF变量数据

建立HDF数据文件

CDF : Common Data File

CDAWlib (第三方idl库函数包) http://spdf.gsfc.nasa.gov/CDAWlib.html 安装: 下载,然后把程序添加进IDL的路径中 启动:正常启动IDL,后在命令行下输入@compile_cdaweb 常用命令:read_mycdf

IDL> a=read_mycdf(‘’,’ ac_h0_mfi_19980924_v04.cdf’,/all) For example: IDL> a=read_mycdf(‘’,’ ac_h0_mfi_19980924_v04.cdf’,/all) IDL> help,/stru,a ** Structure <2819e10>, 17 tags, length=381576, data length=381564, refs=1: EPOCH STRUCT -> <Anonymous> Array[1] TIME_PB5 STRUCT -> <Anonymous> Array[1] MAGNITUDE STRUCT -> <Anonymous> Array[1] BGSEC STRUCT -> <Anonymous> Array[1] LABEL_BGSE STRUCT -> <Anonymous> Array[1] BGSM STRUCT -> <Anonymous> Array[1] LABEL_BGSM STRUCT -> <Anonymous> Array[1] DBRMS STRUCT -> <Anonymous> Array[1] Q_FLAG STRUCT -> <Anonymous> Array[1] SC_POS_GSE STRUCT -> <Anonymous> Array[1] LABEL_POS_GSE STRUCT -> <Anonymous> Array[1] SC_POS_GSM STRUCT -> <Anonymous> Array[1] LABEL_POS_GSM STRUCT -> <Anonymous> Array[1] UNIT_TIME STRUCT -> <Anonymous> Array[1] LABEL_TIME STRUCT -> <Anonymous> Array[1] FORMAT_TIME STRUCT -> <Anonymous> Array[1] CARTESIAN STRUCT -> <Anonymous> Array[1]

IDL> help, /stru, a.magnitude For example: IDL> help, /stru, a.magnitude ** Structure <28994d8>, 54 tags, length=22388, data length=22388, refs=2: VARNAME STRING 'Magnitude' TITLE STRING 'ACE> Magnetometer Parameters' PROJECT STRING Array[2] DISCIPLINE STRING 'Space Physics>Interplanetary Studies' SOURCE_NAME STRING 'AC>Advanced Composition Explorer' DATA_TYPE STRING 'H0>16-Sec Level 2 Data' DESCRIPTOR STRING 'MAG>ACE Magnetic Field Instrument' DATA_VERSION STRING '4' GENERATED_BY STRING 'ACE Science Center' GENERATION_DATE STRING '20030112' LINK_TEXT STRING 'Release notes and other info available at' LINK_TITLE STRING 'the ACE Science Center Level 2 Data website' HTTP_LINK STRING 'http://www.srl.caltech.edu/ACE/ASC/level2/index.html' TEXT STRING Array[11] MODS STRING Array[2] ADID_REF STRING 'NSSD0327' LOGICAL_FILE_ID STRING 'AC_H0_MAG_19980924_V04' LOGICAL_SOURCE STRING 'AC_H0_MFI' LOGICAL_SOURCE_DESCRIPTION STRING 'H0 - ACE Magnetic Field 16-Second Level 2 Data' PI_NAME STRING 'N. Ness'

PI_AFFILIATION STRING 'Bartol Research Institute' MISSION_GROUP STRING 'ACE' INSTRUMENT_TYPE STRING 'Magnetic Fields (space)' TIME_RESOLUTION STRING '16 second' WEB_SITE STRING 'http://www.srl.caltech.edu/ACE/' ACKNOWLEDGEMENT STRING Array[3] RULES_OF_USE STRING Array[3] FIELDNAM STRING 'B-field magnitude' VALIDMIN FLOAT 0.000000 VALIDMAX FLOAT 500.000 SCALEMIN FLOAT 0.000000 SCALEMAX FLOAT 10.0000 UNITS STRING 'nT' FORMAT STRING 'F8.3' MONOTON STRING '' VAR_TYPE STRING 'data' DICT_KEY STRING 'magnetic_field>magnitude' FILLVAL FLOAT -1.00000e+031 LABL_PTR_1 STRING '' LABL_PTR_2 STRING '' UNIT_PTR STRING '' FORM_PTR STRING '' DEPEND_0 STRING 'Epoch' DEPEND_1 STRING '' CATDESC STRING 'B-field magnitude' LABLAXIS STRING '<|B|>' AVG_TYPE STRING '' DISPLAY_TYPE STRING 'time_series' VAR_NOTES STRING '' SCALETYP STRING '' SCAL_PTR STRING '' CDFTYPE STRING 'CDF_REAL4' CDFRECVARY STRING 'VARY' DAT FLOAT Array[5400]

To draw the magnitude v.s. time you can using: IDL-> plot,a.epoch.dat, a.magnitude.dat To avoid the bad data points, refer to ‘Validmin’ and ‘Validmax’ block! IDL-> plot,a.epoch.dat, a.magnitude.dat, yrange=[a.magnitude.validmin, a.magnitude.validmax] For your beautiful plot, you decide the choice! IDL-> plot,a.epoch.dat *10.^(-13), a.magnitude.dat, yrange=[0,60]

CDF vs. netCDF netCDF基于CDF,但是增加了新特性(C language bindings, portable to a number of platforms, machine-independent data format, etc.).: (1)库函数功能类似,但是语法不同; (2)NetCDF 支持变量维度(named dimensions)(i.e., TEMP[x, y, ...]) ,但是CDF 利用传统逻辑定义维度(i.e., TEMP[true, true, ...]) (3)CDF支持与机器无关或者依赖机器的编码方式,但是netcdf只支持与机器无关的编码方式 (4)CDF 支持用户对库函数的修改 (5)netcdf可以利用cdf软件访问,但是反之不成。 CDF vs. HDF CDF是基于矩阵数据管理和打包方式;HDF是分级的数据管理方式。两者的区别是: (1)HDF是标签的数据管理格式,分类标记内部数据对象(如:utility, raster iamge, scientific data …),其基本结构包括:数据对象索引;指向与标签关联的数据对象指针;数据对象; CDF是基于变量的定义(变量名,数据类型,维数等),CDF的结构允许定义相互无关、或者相关的变量,同时支持丰富的元数据属性,方便用于定义更高阶的内容。 (2)HDF对不同的数据对象有不同库函数接口;CDF既支持标准接口,也支持内建接口,更方便新手使用。 (3)HDF数据更新困难,因为数据的物理存储是连续的,如果扩展某一数据记录,整个文件需要重写。CDF具有内建数据地址目录,不要求数据存储连续,可以对变量进行操作(延伸、增加、修改、删除)。

FITS (flexible Image Transport System): 用于存储、传输、操作科研或者其他用途图片的一种数据格式。卫星或者地面观测站对太阳的白光或者紫外、极紫外波段、磁场的观测图像,基本上存储为”fits”文件格式,fits文件一般包括头文件(header)用于存储卫星、数据等信息;以及卫星的观测数据(data)两个部分。对这些fits文件的获取与处理成为了我们进行研究时最基础的内容。

例:solar SoftWare(SSW):太阳数据处理软件 工作环境:IDL 包含软件:几乎所有的太阳观测数据的处理软件,如SOHO,STEREO,HINODE等 http://www.lmsal.com/solarsoft/index_old.html

SSW组织结构 SITE branch for local configuration files GEN branch which contains the SSW general purpose library Mission branches include single instrument observatories Software packages by other individuals or groups which provide useful extensions are integrated and distributed with SSW

安装运行SSW 安装: (1)从服务器上拷贝 从已安装有SSW的服务器拷贝你所需的包到你自己的SSW目录

(2)从网络安装SSW http://www.lmsal.com/solarsoft/ssw_install.html

配置和运行SSW Windows下: (a)编辑$SSW\site\setup\sswidl.bat (b)运行$SSW\site\setup\sswidl.bat Idl 7.0在第一次启动ssw设定工作路径时候,可能出现找不到ssw函数的错误,需要在重新启动sswidl一次;或者将ssw加载到idl的搜索路径中

Linux下配置SSW 编辑/etc/csh.cshrc 或者~/.cshrc,添加以下内容