|
中文版 Location: Homepage >> Xianghui Xue : CV - Publications - Blog |
Personal Note |
idl_tips | ||
|
|
1 contour different values with different colors Contents Top | 在画contour彩色图的时候,试图将正值和负值区分开,比如正值用蓝色表示,负值用红色表示,而0值用白色表示。 这样可以自己定义颜色表:在idl中,每个颜色都可以用r,g,b三个矢量来表示;而红色表示为(255,0,0),蓝色表示为(0,0,255),白色表示为(255,255,255)。这样对于前面提出的希望由负到正,生成一个蓝->白->红的颜色表,对于r,g,b三个量的变化,分别是: r: 0-> 255 -> 255 (蓝- 白 -红) g: 0-> 255 -> 0 b: 255->255->0 因此如果生成一个256元素的颜色表,可以用下面的程序来做,同时保存为mytb.sav ncols = 128 ;First from blue -> white f = FINDGEN(ncols) / (ncols - 1) ; Red vector: 0 -> 255 rVec = 255 * f ; Green vector: 0 -> 255 gVec = rVec ; Blue vector: 255 -> 255 bVec = 255 + fltarr(ncols) ; Next from white -> red ; Red vector: 255 -> 255 rVec = [rVec, 255+fltarr(ncols)] ; Green vector: 255 -> 0 gVec = [gVec, 255 - 255 * f] ; Blue vector: 255 -> 0 bVec = [bVec, 255 - 255 * f] TVLCT, rVec, gVec, bVec save, rVec, gVec, bVec, filename='mytb.sav' 在程序调用此颜色表是,可以使用如下命令: restore, 'mytb.sav' tvlct,rVec,gVec, bVec 但是注意到,此颜色表在生成的时候是对称,及蓝色和红色相对于白色对称。而数据中正值和负值的分布往往不对称,一种解决方案是将正值负值分别设定不同的contour levels,但保持两者中nlevels相同。如: minz=min(data) maxz=max(data) nlevels=40 levels1=(findgen(nlevels/2)+0.00001)/(nlevels/2)*(0-minz)+minz ; 负值部分 levels2=(findgen(nlevels/2)+0.00001)/(nlevels/2)*(maxz-0)+0 ; 正值部分 levels=[levels1,levels2] 这样在contour的时候,就自动满足负值蓝色,正值红色,0值白色的分布。 另一中解决方法是,根据需要画图的levels,计算正值,负值的各自的nlevels,然后利用各自的nlevels去调整颜色表的蓝色和红色的ncols的值,生成一个不对称的颜色表,这样相对比较繁琐。 | |
|
Locations | Statistics | FAQ |
Best view under the 1024x768 resolution and with the normal size of fonts. Designed & developed by Yuming Wang, run for 6432 days since December 15, 2006, and last upgraded on May 28th, 2009. Powered by Apache + PHP coded cOpfOs 3.11.1 last upgraded on February 22nd, 2010. Copyright © 2006, all rights reserved. |