一、获取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

 四、运行效果

 

 

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐