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