IDL绘图时的颜色设置

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

[原]直接图形法的颜色使用总结
IDL中直接图形法还是大家经常用的绘图方法,不需要复杂构建的绘图来说简单才是王道。

但是直接图形法中颜色的使用一直很多人比较困惑。

IDL帮助的表述比较散,可能不太好找,其实IDL的两本中文书里包括dyq都对颜色做了比较好的介绍。

我最早IDL从对象图形入手,直接图形法用的少。

最近反而直接图形法用的多,简单的绘图也用对象图形法麻烦了点。

用的多,对这里面直接图形法颜色做个专门的总结,以后忘了自己还翻翻。

1 IDL直接图形法中有两种显示方法:8位显示模块和24位显示模块。

IDL通过颜色分解的方法来决定是用8位显示模块还是24为显示模式。

Device, Decomposed=0 是关闭颜色分解,这时候用8位显示模块
Device, Decomposed=1 是打开颜色分解,这时候用24位显示模块
8位显示模式:简单的说就是用颜色表来显示图形或矢量。

用户自定义或选择系统颜色索引表0-255个值,每个值对应一个颜色。

24显示模式:有255*255*255种颜色显示,这种方式需要用red+green*2L^8+blue*2L^16转换成index使用。

2举例:
----------------------------------------
Pro test
DEVICE, DECOMPOSED = 0
x=randomu(seed,10)
y=randomu(seed,10)
Window, Xsize = 400, Ysize = 400
;加载系统颜色表
LoadCT, 13
Plot, x,y,BACKGROUND=100,COLOR=128
;可以获得当前颜色表的值,可以通过tvlct创建直接的颜色表
TvLCT, red, green, blue, /Get
End
----------------------------------------
--------------------------------------------
Pro test1
DEVICE, DECOMPOSED = 1
BACKGROUND = 0 + (255 * 2L^8) + (0 * 2L^16)
COLOR = 255 + (0 * 2L^8) + (0 * 2L^16)
x=randomu(seed,10)
y=randomu(seed,10)
Window, Xsize = 400, Ysize = 400
Plot, x,y,BACKGROUND=BACKGROUND,COLOR=COLOR
End
--------------------------------------------
转idl颜色
通常的颜色主要由三原色RGB(红,绿,蓝)组合形成,对于这样一个三色数组比较容易理解,而且调配颜色也是比较方便。

但是在IDL中绘图法时,多数要用到颜色索引来进行绘图颜色的分配。

而颜色索引是通过查找颜色表来获取颜色的三色值。

要注意的是IDl中颜色有两种模式,一种是8位显示器,一种用于24位显示器。

8位显示只有256种颜色,而24位显示择优256*256*256种颜色。

在IDL中通过Device设置颜色模式,Decomposed=0表示用8位,颜色索引从0到255。

Decomposed=1表示24位颜色,颜色索引最大为16777215。

该索引通常由一个24位长整形表示,此处以黄色为例,可以用Color=65535L表示。

也可以通过16进制数设置,Color='00FFFF'xL。

但是这种颜色索引设置过于复杂,远没有使用RGB来表示形象直观,我们可以对其进行RGB分解,通过一个RGB三原色来组合得到一个想要的索引。

因此可利用下面的函数来将R、G、B值简单的转换为索引值,便于使用
Function RGB2Index,red,green,blue
index=long(red)+256L*long(green)+256L^2*long(blue)
return,index
end
这个函数的返回值既是需要的颜色索引,在直接绘图过程命令中,我们只需要将这个索引赋值与Color值就可以了。

-------------------
以上只是通过一个R,G,B三个数值来进行颜色索引,有时候为了方便通常用一个数组来直接赋值,只需要简单修改以上函数就可以。

笔者对以上函数进行了从新修改,既可以通过直接输入三原色值,也可直接通过数组赋值来得到颜色索引。

在IDL中绘图中使用汉字或希腊字母
在IDL中,我们常常需要在图像上输入数学公式,或使用汉字。

下面我介绍自己使用的方法:
(1) 你需要配置输出设备,给出指定的字体(比如宋体,Arial Unicode MS等等)。

每种字体都包含了部分Unicode 字符集。

Unicode是一种主要地显示和交换字符编码地标准。

它覆盖了美国,欧洲,中东,非洲,印度,亚洲和太平洋地区地语言。

具体可到/charts上查询。

这里我们将在后面图形中使用汉字,则输入以下命令:
IDL> set_plot,'ps'
IDL> device,file='figure.ps',set_font='宋体', /tt_font
其中/tt_font表明字体是TrueType型的(微软和Apple公司共同研制的字型标准)。

(2) 下面我们画图
IDL> plot, findgen(10), font=1, $
title="Chinese Nonsense Title !Z(4eff, 4e9f, 4eaf)", $
charsize=2, color=0, background=255
命令中4eff, 4e9f, 4eaf分别为三个汉字对应的Unicode编码(如果你有不同的汉字则需要知道每个汉字对应的Unicode 编码,可到/charts上查询)。

!Z是解码命令,即把Unicode编码变成相应的汉字。

注意这里font关键字要设为1,表明你使用的是TrueType型的字体。

(3) 好了,下面我们继续添加一些希腊字母,并使用上下标
IDL> device, set_font='isolatin1'
IDL> xyouts, 0.5,0.7, "El Ni!Z(00f1)o", charsize=2,font=1,color=1, /normal
IDL> xyouts, 0.5,0.5, '20!Eo!NC', charsize=4,font=1,color=1, /normal
IDL> xyouts, 0.5,0.3, "CO!I2!N", charsize=4,font=1,color=1, /normal
这里需要说明的是(!+字母)命令的意思:
!E表示后面的字母用作上标
!I表示后面的字母用作下标
!N表示返回正常状态
!!表示!符号
!C表示开始新的一行
如!Eo!NC表示o为上标,然后回到正常状态,再加C字母
!+数字,表示字体的大小
(4) 最后关闭输出设备
IDL>device,/close
我们得到下面的图
摘自:/4220711.html。

相关文档
最新文档