来自:siynuo > 馆藏分类
配色: 字号:
IDL中contour和colorbar的使用技巧
2013-06-07 | 阅:  转:  |  分享 
  
使用IDL绘制等值线和填充对应的颜色
【学习内容】:等值线和画法和颜色的填充
主要程序:IDL8.0
使用IDL程序的图形系统对数据极性成像化分析,研究IDL的画图方法和比较画图效果,得出比较满意的图画。
程序源代码如下:
protest_4
;file=''M''+[''X'',''Y'',''Z'',''F'',''I'',''D'',''H'']+''_''+''2010_0.0''+''.dat''
file=''MX_2010_0.0.dat''
fori=0,6dobegin
file1=read_ascii(file[i])
name=strmid(file[i],0,7)
d1=file1.field001

device,decompose=1
xx=-89+findgen(179)(180./179)
yy=-180+findgen(361)
nlevels=21
step=(max(d1)-min(d1))/nlevels
vals=findgen(nlevels)step+min(d1)
vals=[min(d1)-1,vals,max(d1)+1]
xname=[''-180'',''-135'',''-90'',''-45'',''0'',''45'',''90'',''135'',''180'']
yname=[''-90'',''-60'',''-30'',''0'',''30'',''60'',''90'']
p1=contour(d1,yy,xx,RGB_table=25,$
c_value=vals,$
xstyle=1,ystyle=1,$
;N_levels=N_elements(vals),$;设置填充层数
position=[0.10,0.20,0.85,0.75],$;设置图像显示位置,正交坐标系【0,0,1,1】
xrange=[-180,180],yrange=[-90,90],$;用来局部放大数据空间,即只显示给定范围的图像
planar=1,$;设置显示模式,0为三维,1为平面
view_title=name,$
xtitle=''Logitude'',$
xminor=0,xtickname=xname,xticklen=0.05,$
yminor=0,ytickname=yname,yticklen=0.05,$
ytitle=''Latitude'',$;设置标题
/fill);填充模式
cbar=COLORBAR(traget=p1,ORIENTATION=1,$
font_size=7.5,POSITION=[0.86,0.20,0.91,0.75],textpos=1)
p2=contour(d1,yy,xx,c_value=vals,/follow,$
c_label_show=1,font_size=7.5,planar=1,/overplot)
endfor
end
使用该程序可以对地球主磁场的7要素进行绘图处理,图像如下:




下面对其中的几条主要的指令进行说明:
step=(max(d1)-min(d1))/nlevels
vals=findgen(nlevels)step+min(d1)
vals=[min(d1)-1,vals,max(d1)+1]
以上三条命令是设置等值线的线条数目和对应的颜色数目,为了得到合理的等值线和条数和使用颜色填充是,对应的颜色和等值线想吻合,在每两条等值线之间都有对应的颜色填充。自动设置两条等值线的间隔为step=(max(d1)-min(d1))/nlevels,这样的话可以确保等值线的合理性和下一步设置等值线的数值是的对应关系,vals=findgen(nlevels)step+min(d1),其中vals的数值和原始数据相对应。由于IDL填充颜色是从最小值开始填充,那样的话在最大值和背景颜色之间就会出现一个颜色“空洞”,如:

显然这个很慢满足要就要求,为了将所有等值线之间填充上颜色(最大值和背景色之间),需要改变填充的最值,即vals=findgen(nlevels)step+min(d1)的需要做出调整,经过不断的尝试,选取vals=[min(d1)-1,vals,max(d1)+1],在原始的基础上多加两层等值线,确保数据范围都在填充颜色范围内。结果如上图(右),显然重新设置后的填充效果要好很多。
在contour中使用RGB_TABLE=25,导入所需的颜色列表,c_value=vals用来设置绘制的等值线,
xminor=0,xtickname=xname,xticklen=0.05,$
yminor=0,ytickname=yname,yticklen=0.05,$
用来设置坐标轴的显示信息,/fill表明为颜色填充,若取消该关键字则不对图像进行颜色点冲,效果如下:

cbar=COLORBAR(traget=p1,ORIENTATION=1,$
font_size=7.5,POSITION=[0.86,0.20,0.91,0.75],textpos=1)
用来设置色标,orientation=1为垂直方向,默认值为0(水平方向)
p2=contour(d1,yy,xx,c_value=vals,/follow,$
c_label_show=1,c_linestyle=2,font_size=7.5,planar=1,/overplot)
使用/overplot的contour命令在颜色填充图上绘制等值线,最终效果件上图(右)。
当然也可以只显示其中的几条等值线,用一下代码取代相应位置,
p2=contour(d1,yy,xx,c_value=vals2,/follow,$
c_label_show=1,c_linestyle=2,font_size=7.5,planar=1,/overplot)
结果乳如下:

小结:
IDL中绘制等值线颜色填充图时,最终的是先绘制背景颜色填充效果,然后在颜色上覆盖等值线。在设置相关参数是要注意颜色划分要和等值线的条数相对应,填充过程中要注意颜色“空洞”的出现。
献花(0)
+1
(本文系siynuo首藏)