IDL PRACTICE -plotting-



二次元プロッティング

IDL> original=sin((findgen(200)/35)^2.5)
        #時間経過によって周波数が増加する正弦波関数を作成し、originalという変数に格納する#
IDL> plot,original

IDL> noisy=original + ((randomu(seed,200)-.5)/2)
        #均一に分布している不規則ノイズをこのデータセットに追加し、それを新しい変数に格納する#
    #randomu関数は、均一に分布している不規則な値の配列を作成する。#
IDL> plot,noisy
  
IDL> plot,original,xtitle="Time",ytitle="Amplitude"
IDL> oplot,noisy,psym=1
        #oplotは、既存のplotを消さずに、新たなデータセットを重ねてplotするときに使用する。#
IDL> smoothed=smooth(noisy,5)
        #smooth関数は、指定した幅を持つボックスカー平均でsmooth処理した配列を返す。#
IDL> plot,smoothed,title="Smmothed Data"
  

IDL> y=findgen(200)
        #より適切にノイズを取り除く方法として、filtering手法がある。
         ノイズの原因は、サンプルデータに含まれる不要な高周波である。
     ノイズにあるデータにlow pass filterをかけると、低周波数成分を保持しながら
         高周波数をsmooth処理してくれる。#
        #findgen関数は、各要素をその添字の値に設定した浮動小数点配列を作成する。
         このfilterは、サンプリングの総周期ごとに40サイクルのカットオフを行う5段階Butterworth filter#
IDL> y(101:199)=-reverse(y(1:99))
% Compiled module: REVERSE.
IDL> print,y(101),y(99)
     -99.0000      99.0000
IDL> filter=1./(1+(y/40)^10)
IDL> plot,filter
  
IDL> lowpass=fft(fft(noisy,1)*filter,-1)
        #周波数領域のデータにfilterをかけるために、データのfourier変換とfilterの周波数反応の積を
          計算してから、逆fourier変換を利用してデータを空間域に戻す。#
IDL> plot,lowpass

IDL> highpass=fft(fft(noisy,1)*(1.0-filter),-1)
    #同じfilterは、ハイパスfilterに使用することもできる。#
IDL> plot,highpass

IDL> !p.multi=[0,2,3]
        #1頁にいくつのplotを表示できるかをIDLに伝える。
         今の場合、縦2列、横3列分のplotを表示させることができる。#
IDL> plot,original,title="Original 'Ideal' Data"
IDL> plot,noisy,title="Noisy Data"
IDL> plot,shift(filter,100),title="Filter Function"
        #shift関数は、filterのピークを中央に描くために使用する。#
IDL> plot,lowpass,title="Lowpass Filtered"
IDL> plot,highpass,title="Highpassed Filtered"
IDL> plot,smoothed,title="Smoothed With Boxcar Average
IDL> !p.multi=0
        #元の表示設定に戻しておく#

いくつかのデータ点が欠落しているplotの作成
IDL> a=indgen(50)
IDL> print,a(0),a(30)
       0      30
IDL> a(randomu(seed,10)*50)=999
IDL> plot,a
IDL> plot,a,max_value=998
        #データの値が998以下のもののみを表示#

速度場のplotting
IDL> vx=original # findgen(200)
IDL> vy=noisy # findgen(200)
IDL> vel,vx,vy
        #VEL routineはXおよびY方向の速さセットした配列に基いて流跡線をplotする。#


サーフェスプロッティング
IDL> z=shift(dist(40),20,20)
     #各要素が原点からのユークリッド距離に等しい値を保ち、その原点を
         中央に移動させた40×40要素の配列を作成#
IDL> z=exp(-(z/10)^2)
        #Gauss分布#
IDL> surface,z
        #ワイヤメッシュサーフェスを見る#
IDL> surface,z,ax=70,az=25
        #axはX軸に対してサーフェスの回転する角度#  
        #azはZ軸の周りを左回りに、サーフェスが回転する角度#
IDL> loadct,3
        #既に定義されているIDLカラーテーブルの一つをload#
IDL> shade_surf,z
        #light soarce shade surfaceを表示#
IDL> shade_surf,z,ax=45,az=20,charsize=1.5,$
        #charsezeはplotした文字サイズを制御する#
        #$はIDLの継続文字#
IDL> title="Shaded Surface Representation"
IDL> shade_surf,z,shade=bytscl(z)
        #それぞれの高さに合せて異ったshading colorをplot#
IDL> surface,z,xstyle=4,ystyle=4,zstyle=4
        #軸ごとに異なるスタイルを選択する時に使う。4は軸を表示しない。#
IDL> contour,z
        #等高線表示#
IDL> contour,z,nlevel=8,/follow
     #nlevelは、8レベルの等間隔なcontourをplotすることを指示
         /followは、そのcontourのラベルを作成#
IDL> surfr
        #デフォルトの3D視点角度を設定#
IDL> contour,z,nlevels=8,/T3D
        #contourが3D透視図として描かれる#


IDL画像の印刷
IDL> set_plot,'ps'
     #graphicsの出力をどこに送るかをIDLに伝える#
IDL> device,filename='surface.ps'
        #出力するファイル名を設定#
IDL> surface,z
IDL> device,/close
        #新しいpsファイルをクローズする
         確かにsurface.psが保存されている#
kipsuh> lpr surface.ps
        #印刷#

画像の読み込み
IDL> openr,1,filepath('people.dat',subdir='examples/data')
        #open文は、''で囲んだ名前のファイルをオープンし、最初の引数として、
         与えられた論理ユニット番号にそのファイルを割当る。
         ここではpeople.datを1番に指定している。#
        #filepath関数は、openrに対する引数として使われ、IDLのexamples/data
         というdirectoryにあるファイルpeople.datの全パスを返す。
      people.datには2つの画像が192×192要素の配列として含まれている。#
IDL> a=assoc(1,bytarr(192,192))
     #画像が、フォーマットされていないバイナリーデータの復号配列として
         保存されている場合、ASSOC関数を使うことによって配列の順序と
         データファイルを結び付けることができる。
         ここではaという名の192×192要素の配列をファイルユニット番号1と
         結び付けるようにする。
         a(0)には1番目の画像が、a(1)には2番目の画像が対応する#。
IDL> b=a(1)
IDL> close,1
        #2番目の画像をbに取り込んでからファイルをクローズ#
IDL> tv,b
        #スケーリングなしで配列データを画像として表示#
IDL> tvscl,b
        #カラーテーブル全体を使ってスケールしたカラー値で画像を表示#
IDL> b=rebin(b,192*2,192*2)
IDL> tv,b
        #rebinはリサイズのコマンド。
         整数倍でしか配列を拡大あるいは縮小できない。#
IDL> tv,b*2
        #bの各要素に2をかけて表示#

コントラストの強調
IDL> tvscl,b gt 80
        #bの値が80以上なら白、80未満なら黒としてpixel表示#
IDL> tvscl,b lt 80
        #bの値が80以上なら黒、80未満なら白としてpixel表示#
IDL> tv,hist_equal(b)
        #hist_equalは配列の再分布を行う#
IDL> tvscl,b>70
        #70より大きいpixel値を、表示できる輝度の範囲いっぱいまでスケールする#
IDL> tvscl,b<125
        #125より小さいpixel値を、表示できる輝度の範囲いっぱいまでスケールする#
IDL> d=bytscl(b<125)
        #画像を画面に送る代りに、新しい値を配列dに保存#
IDL> tvscl,b>30<80
        #最小輝度を30に、最大輝度を80に設定#
IDL> tv,bytscl(b,min=30,max=80,top=!d.n_colors)
        #同じ関数をより効果的に実行できる#


hiro-wt アットマーク soleil.mbox.media.kyoto-u.ac.jp