IDL读取卫星数据可视化(作业记录:2008年8月25日美国东部时间06:00至09:00之间的磁场强度和离子β)
·
一、获取CDF变量信息
pro test
file = 'C:\Users\XCL\Desktop\omni_hro_1min_20080801_v01.cdf'
;打开cdf文件
id = cdf_open(file)
;获取CDF文件全局变量信息
inq = cdf_inquire(id)
cdf_control,id,get_numattrs=num_attrs
if (inq.nzvars ge 1) then begin
for i=0, inq.nzvars-1 do begin
var_inf=cdf_varinq(id,i,/zvariable)
cdf_control,id,var=var_inf.name,get_var_info=info, /zvar
if(info.maxrec le 0) then continue
print,'-------------------------------'
print,' ',var_inf.name
print,'-------------------------------'
for j=0, num_attrs[1]-1 do begin
cdf_attinq,id,j+num_attrs[0],name1,scope1,maxentry1,maxzentry1
if (cdf_attexists(id,j+num_attrs[0],i,/zvariable)) then begin
cdf_attget,id,j+num_attrs[0],i,value1,/zvariable
print,name1,value1,format='(2x,A10,":",4x,A)'
endif
endfor
endfor
endif
print, 'Run over!'
end
得到基本参量信息后根据自己所需要的变量编写读取函数。本文需要的是磁场数据以及等离子体β。
二、函数
pro read_cdf_C1_fgm,file,bv1,bt1
id=cdf_open(file)
a=cdf_inquire(id)
cdf_control,id,variable='time_tags__C1_CP_FGM_SPIN',get_var_info=info1
cdf_control,id,variable='B_vec_xyz_gse__C1_CP_FGM_SPIN',get_var_info=info2
cdf_control,id,variable='B_mag__C1_CP_FGM_SPIN',get_var_info=info3
cdf_varget,id,'time_tags__C1_CP_FGM_SPIN',tt,rec_count=info1.maxrec,/zvariable
cdf_varget,id,'B_vec_xyz_gse__C1_CP_FGM_SPIN',bv12,rec_count=info2.maxrec,/zvariable
cdf_varget,id,'B_mag__C1_CP_FGM_SPIN',bt12,rec_count=info3.maxrec,/zvariable
cdf_close,id
bv1={x:transpose(tt),y:transpose(bv12)}
bt1={x:transpose(tt),y:transpose(bt12)}
return
end
pro read_cdf_C2_fgm,file,bv2,bt2
id=cdf_open(file)
a=cdf_inquire(id)
cdf_control,id,variable='time_tags__C2_CP_FGM_SPIN',get_var_info=info1
cdf_control,id,variable='B_vec_xyz_gse__C2_CP_FGM_SPIN',get_var_info=info2
cdf_control,id,variable='B_mag__C2_CP_FGM_SPIN',get_var_info=info3
cdf_varget,id,'time_tags__C2_CP_FGM_SPIN',tt,rec_count=info1.maxrec,/zvariable
cdf_varget,id,'B_vec_xyz_gse__C2_CP_FGM_SPIN',bv22,rec_count=info2.maxrec,/zvariable
cdf_varget,id,'B_mag__C2_CP_FGM_SPIN',bt22,rec_count=info3.maxrec,/zvariable
cdf_close,id
bv2={x:transpose(tt),y:transpose(bv22)}
bt2={x:transpose(tt),y:transpose(bt22)}
return
end
pro read_cdf_C3_fgm,file,bv3,bt3
id=cdf_open(file)
a=cdf_inquire(id)
cdf_control,id,variable='time_tags__C3_CP_FGM_SPIN',get_var_info=info1
cdf_control,id,variable='B_vec_xyz_gse__C3_CP_FGM_SPIN',get_var_info=info2
cdf_control,id,variable='B_mag__C3_CP_FGM_SPIN',get_var_info=info3
cdf_varget,id,'time_tags__C3_CP_FGM_SPIN',tt,rec_count=info1.maxrec,/zvariable
cdf_varget,id,'B_vec_xyz_gse__C3_CP_FGM_SPIN',bv32,rec_count=info2.maxrec,/zvariable
cdf_varget,id,'B_mag__C3_CP_FGM_SPIN',bt32,rec_count=info3.maxrec,/zvariable
cdf_close,id
bv3={x:transpose(tt),y:transpose(bv32)}
bt3={x:transpose(tt),y:transpose(bt32)}
return
end
pro read_cdf_C4_fgm,file,bv4,bt4
id=cdf_open(file)
a=cdf_inquire(id)
cdf_control,id,variable='time_tags__C4_CP_FGM_SPIN',get_var_info=info1
cdf_control,id,variable='B_vec_xyz_gse__C4_CP_FGM_SPIN',get_var_info=info2
cdf_control,id,variable='B_mag__C4_CP_FGM_SPIN',get_var_info=info3
cdf_varget,id,'time_tags__C4_CP_FGM_SPIN',tt,rec_count=info1.maxrec,/zvariable
cdf_varget,id,'B_vec_xyz_gse__C4_CP_FGM_SPIN',bv42,rec_count=info2.maxrec,/zvariable
cdf_varget,id,'B_mag__C4_CP_FGM_SPIN',bt42,rec_count=info3.maxrec,/zvariable
cdf_close,id
bv4={x:transpose(tt),y:transpose(bv42)}
bt4={x:transpose(tt),y:transpose(bt42)}
return
end
pro read_cdf_C1_CIS,file,ni,t1,pi
id=cdf_open(file)
a=cdf_inquire(id)
cdf_control,id,variable='time_tags__C1_CP_CIS-HIA_ONBOARD_MOMENTS',get_var_info=info1
cdf_control,id,variable='density__C1_CP_CIS-HIA_ONBOARD_MOMENTS',get_var_info=info2
;cdf_control,id,variable='velocity_isr2__C1_CP_CIS-HIA_ONBOARD_MOMENTS',get_var_info=info3
; cdf_control,id,variable='velocity_gse__C1_CP_CIS-HIA_ONBOARD_MOMENTS',get_var_info=info4
cdf_control,id,variable='temperature__C1_CP_CIS-HIA_ONBOARD_MOMENTS',get_var_info=info3
cdf_control,id,variable='pressure__C1_CP_CIS-HIA_ONBOARD_MOMENTS',get_var_info=info4
cdf_varget,id,'time_tags__C1_CP_CIS-HIA_ONBOARD_MOMENTS',tt,rec_count=info1.maxrec,/zvariable
cdf_varget,id,'density__C1_CP_CIS-HIA_ONBOARD_MOMENTS',ni2,rec_count=info2.maxrec,/zvariable
; ;cdf_varget,id,'velocity_isr2__C1_CP_CIS-HIA_ONBOARD_MOMENTS',visr2,rec_count=info3.maxrec,/zvariable
; cdf_varget,id,'velocity_gse__C1_CP_CIS-HIA_ONBOARD_MOMENTS',vgse2,rec_count=info4.maxrec,/zvariable
cdf_varget,id,'temperature__C1_CP_CIS-HIA_ONBOARD_MOMENTS',t12,rec_count=info3.maxrec,/zvariable
cdf_varget,id,'pressure__C1_CP_CIS-HIA_ONBOARD_MOMENTS',pi2,rec_count=info4.maxrec,/zvariable
cdf_close,id
ni={x:transpose(tt),y:transpose(ni2)}
t1={x:transpose(tt),y:transpose(t12)}
pi={x:transpose(tt),y:transpose(pi2)}
return
end
做好准备工作后就可以进行绘图了
三、绘图
pro hw3
read_cdf_c1_fgm,'C:\Users\XCL\Desktop\C1_CP_FGM_SPIN__20080825.cdf',bv1,bt1
read_cdf_c2_fgm,'C:\Users\XCL\Desktop\C2_CP_FGM_SPIN__20080825.cdf',bv2,bt2
read_cdf_c3_fgm,'C:\Users\XCL\Desktop\C3_CP_FGM_SPIN__20080825.cdf',bv3,bt3
read_cdf_c4_fgm,'C:\Users\XCL\Desktop\C4_CP_FGM_SPIN__20080825.cdf',bv4,bt4
read_cdf_C1_CIS,'C:\Users\XCL\Desktop\C1_CP_CIS-HIA_ONBOARD_MOMENTS__20080825.cdf',ni,t1,pi
;时间转换
t_b1=CDF_EPOCH_TOJULDAYS(bv1.x)
t_b2=CDF_EPOCH_TOJULDAYS(bv2.x)
t_b3=CDF_EPOCH_TOJULDAYS(bv3.x)
t_b4=CDF_EPOCH_TOJULDAYS(bv4.x)
t_b5=CDF_EPOCH_TOJULDAYS(ni.x)
c_bt1=data_cut(bt1,ni.x)
bpc1=(c_bt1)*(c_bt1)*0.01/25.13274
ptotal=bpc1+pi.y
betal=pi.y/ptotal
trag=julday(8,25,2008,[6,9],0,0)
;设置图片尺寸相关参数
x0=0.2;画图区域的左下角X坐标(归一化坐标系)
xs=0.7;每一栏的长度
y0=0.95;画图区域最大y坐标值
ys=0.12;每一栏的高度
yg=0.003;相邻两栏的间隔
pngon,xsize=1800,ysize=2100
loadct, 0
polyfill, [0.65, 0.65, 0.7, 0.7], [0.34, 0.95, 0.95, 0.34], /fill, /normal, color = 230
plots, [0.2, 0.9], [0.4175, 0.4175], /normal, linestyle = 5, thick = 3
loadct, 39
plot,t_b1,bv1.y[*,0],/noerase,charsize=4,thick=4, $
position=[x0,y0-1*ys-0*yg,x0+ xs,y0-0*ys-0*yg], $
xthick=2,xticklen=0.1,xstyle=1,xminor=3,xtitle=' ',xtickinterval=1800/(24*60.0*60D),xtickname=replicate(' ',10), $
ythick=2,yticklen=0.015,ystyle=1,xrange=trag,yrange=[-20,-15],ytickinterval=2,yminor=2,ytitle=''
oplot,t_b2,bv2.y[*,0],thick=4,color=250;red
oplot,t_b3,bv3.y[*,0],thick=4,color=150;green
oplot,t_b4,bv4.y[*,0],thick=4,color=50;
axis,x0-0.04, y0 - 1*ys - 0*yg, yaxis=0, yticklayout=1, /normal, ytickname =replicate(' ',10), charsize=4,ytitle = 'B!dX!n!c[nT]'
plot,t_b1,bv1.y[*,1],/noerase,charsize=4,thick=4, $
position=[x0,y0-2*ys-1*yg,x0+ xs,y0-1*ys-1*yg], $
xthick=2,xticklen=0.1,xstyle=1,xminor=3,xtitle=' ',xtickinterval=1800/(24*60.0*60D),xtickname=replicate(' ',10), $
ythick=2,yticklen=0.015,ystyle=1,xrange=trag,yrange=[-5,0],ytickinterval=2,yminor=2,ytitle=''
oplot,t_b2,bv2.y[*,1],thick=4,color=250
oplot,t_b3,bv3.y[*,1],thick=4,color=150
oplot,t_b4,bv4.y[*,1],thick=4,color=50
axis,x0-0.04, y0 - 2*ys - 1*yg, yaxis=0, yticklayout=1, /normal, ytickname =replicate(' ',10), charsize=4,ytitle = 'B!dY!n!c[nT]'
plot,t_b1,bv1.y[*,2],/noerase,charsize=4,thick=4, $
position=[x0,y0-3*ys-2*yg,x0+ xs,y0-2*ys-2*yg], $
xthick=2,xticklen=0.1,xstyle=1,xminor=3,xtitle=' ',xtickinterval=1800/(24*60.0*60D),xtickname=replicate(' ',10), $
ythick=2,yticklen=0.015,ystyle=1,xrange=trag,yrange=[-5,0],ytickinterval=2,yminor=2,ytitle=''
oplot,t_b2,bv2.y[*,2],thick=4,color=250
oplot,t_b3,bv3.y[*,2],thick=4,color=150
oplot,t_b4,bv4.y[*,2],thick=4,color=50
axis,x0-0.04, y0 - 3*ys - 2*yg, yaxis=0, yticklayout=1, /normal, ytickname =replicate(' ',10), charsize=4,ytitle = 'B!dZ!n!c[nT]'
plot,t_b1,bt1.y,/noerase,charsize=4,thick=4, $
position=[x0,y0-4*ys-3*yg,x0+ xs,y0-3*ys-3*yg], $
xthick=2,xticklen=0.1,xstyle=1,xminor=3,xtitle=' ',xtickinterval=1800/(24*60.0*60D),xtickname=replicate(' ',10), $
ythick=2,yticklen=0.015,ystyle=1,xrange=trag,yrange=[15,20],ytickinterval=2,yminor=2,ytitle=''
oplot,t_b2,bt2.y,thick=4,color=250
oplot,t_b3,bt3.y,thick=4,color=150
oplot,t_b4,bt4.y,thick=4,color=50
axis,x0-0.04, y0 - 4*ys - 3*yg, yaxis=0, yticklayout=1, /normal, ytickname =replicate(' ',10), charsize=4,ytitle = 'B!dT!n!c[nT]'
plot,t_b5,betal,/noerase,charsize=4,thick=4, $
position=[x0,y0-5*ys-4*yg,x0+ xs,y0-4*ys-4*yg], $
xthick=2,xticklen=0.1,xstyle=1,xminor=3,xtitle=' ',xtickinterval=1800/(24*60.0*60D),xtickname=replicate(' ',10), $
yrange=[10.0^(-3),10.0^0],ythick=2,yticklen=0.015,ystyle=1,/ylog,ytickname=['10!E-3!N','10!E-2!N','10!E-1!N','10!E0!N'],xrange=trag,ytitle='',font=1
axis,x0-0.04, y0 - 5*ys - 4*yg, yaxis=0, yticklayout=1, /normal, ytickname =replicate(' ',10), charsize=5,ytitle = '!9b!3!di',font=1
xyouts,0.77,0.96,'2008-08-25',charsize = 5,CHARTHICK = 1,/normal
xyouts, 0.91, 0.93, 'C1', charsize = 5, /normal, color = 0
xyouts, 0.91, 0.905, 'C2', charsize = 5, /normal, color = 250
xyouts, 0.91, 0.88, 'C3', charsize = 5, /normal, color = 150
xyouts, 0.91, 0.8595, 'C4', charsize = 5, /normal, color = 50
xyouts,0.1,0.30,'UT'+'!cX!dC1'+'!cY!dC1'+'!cZ!dC1',charsize = 5,charthick =5,/normal
xyouts,0.17,0.30,'0600'+'!c-18.60'+'!c-7.75'+'!c6.12',charsize = 5,/normal
xyouts,0.288,0.30,'0630'+'!c-18.60'+'!c-7.79'+'!c6.17',charsize = 5,/normal
xyouts,0.406,0.30,'0700'+'!c-18.60'+'!c-7.83'+'!c6.22',charsize = 5,/normal
xyouts,0.524,0.30,'0730'+'!c-18.59'+'!c-7.85'+'!c6.28',charsize = 5,/normal
xyouts,0.642,0.30,'0800'+'!c-18.56'+'!c-7.87'+'!c6.36',charsize = 5,/normal
xyouts,0.76,0.30,'0830'+'!c-18.53'+'!c-7.87'+'!c6.45',charsize = 5,/normal
xyouts,0.878,0.30,'0900'+'!c-18.48'+'!c-7.86'+'!c6.55',charsize = 5,/normal
pngoff,'E:\Plot1.png'
end
此代码需要安装spedas库。补充pngon、pngoff两个函数
pro pngon,xsize=xsize,ysize=ysize,color_table= color_table,_extra= extra
if~keyword_set(color_table) then color_table=39
if~keyword_set(xsize) then xsize=1000
if~keyword_set(ysize) then ysize=800
set_plot,'win'
tvlct,255,255,255,255
tvlct,0,0,0,0
device,decomposed=0
loadct,color_table
window,1,xsize=xsize,ysize=ysize,/pixmap,_extra= extra
!p.color=0
!p.background=255
!p.font= 1
erase,255
end
pro pngoff,file
write_png,file,tvrd(/true)
end
四、运行效果

更多推荐
所有评论(0)