[Previous] [Up][Next]

3. IGORのグラフで遊ぶ

(1) 新しいwave

新しくaという名前のwave を作ります。

make/n=100/d a
setscale/p x, 0, 0.1, "ms" a
display a
a=exp(-x/3)+0.05*sin(10*x)+0.02*sin(1+50*x)

display a


グラフをクリックすることによりDialogが出てきます。それを用いて、いろいろな、グラフの色、表し方(線、点、マークなど)を設定することが出来ます。これらの操作はコマンド入力でも可能ですが、マウスで行う方が便利だと思います。x軸、y軸などについてもクリックしてDialogを出し、いろいろな設定をすることが可能です。

グラフの一部を拡大したい場合には、マウスの左ボタンを押さえた状態で領域を設定し、マウス右ボタンで、拡大、縦方向に拡大、横方向に拡大などを選択します。もとの大きさに戻すためには、ctrl^Aのキー入力を行います。

(2) カーサーcursor
グラフの解析を行う場合、役立つツールはカーサーです。メニューでGraph -> Show Info、もしくはctrl^Iのキー入力で、グラフの下の部分にカーサーの表示が出てきます。AとBの2つのカーサーの使用がかのうです。マウスでカーサーの位置を設定することが出来ます。

カーサーAのx軸の位置(配列に何番目)と値(x軸の値)は、表示されていますが、pcsr(A)で位置が、xcsr(A)でx軸の値を得ることが出来ます。
print pcsr(A), xcsr(A)
で試してみてください。


(3) 統計値
さて、wave aの統計を見てみましょう。統計的な数値は、メニューでAnalysis -> Wave Statsでwaveを選ぶことにより得られます。もしくは、コマンド入力で、
WaveStats a
とします。
V_npntsはwaveに含まれるデータの数。V_avgは平均、V_sdevは標準偏差です。またV_minは最小値、V_maxは最大値です。V_minloc、V_maxlocはそれぞれ最小値、最大値となるxの値です。

WaveStatsで結果が表示されるのが目障りな場合は、
WaveStats/Q a
とすることにより、結果の表示をしないようにすることが出来ます(Quiet)。

WaveStatsはwaveの範囲を限定することが可能です。たとえば、2から4までの範囲の平均などを求めたい場合は、Analysis -> WaveStatsで出てくるDialogに2と4を入れるか、コマンド入力で、
WaveStats/R=(2,4) a
とします。この場合、x軸の両端の値の両方が含まれていることに留意しておいてください。x軸の値の変わりに、wave内での位置(position)を使った表記も可能です。
WaveStats/R=[20,40] a

ここでカーサーを使うと便利です。
WaveStats/R=(xcsr(A),xcsr(B)) a
もしくは
WaveStats/R=[pcsr(A),pcsr(B)] a

上は,x軸の値を用いたあらわし方、下は位置(position)を用いたあらわしかたです。結果は同じ(はず)。


(4) 平均の線

二つのカーサーの間の平均をとり、そこに線を描いて見ましょう。waveの名前をamとします。直線ですから、waveの大きさ(dimension)は2でよいはずです。SetScaleは少し複雑そうに見えますが、はじめの値と2点間の差を設定していることが理解できると思います。
make/n=2/d aw
setscale/p x xcsr(A),xcsr(B)-xcsr(A),"ms" am
AppendToGraph am
WaveStats/R=[pcsr(A),pcsr(B)] a
am=V_avg




(5) マクロ ---不精な人のために---

このような状態でカーサーの値を変えても、平均の線は変わりません。新しいカーサーの位置に対応した平均の線となるようにするためには、
setscale/p x xcsr(A),xcsr(B)-xcsr(A),"ms" am
WaveStats/R=[pcsr(A),pcsr(B)] a
am=V_avg

という作業が必要です。

このような作業を繰り返し行うことは、出来るだけ避けたいことです。そこでマクロ機能をりようすることが出来ます。 マクロは、コマンド入力で行われる操作を一まとめにし、いちいち入力するという操作を簡便にするためのツールです。

マクロの名前をaveとしておきましょう。

メニューでWindows -> Procedure WindowでProcedureウィンドウを開きます。まず
macro avg()
と入力し、その次にhisotoryから適当にコピー&ペイストして、

setscale/p x xcsr(A),xcsr(B)-xcsr(A),"ms" am
WaveStats/R=[pcsr(A),pcsr(B)] a
am=V_avg

を加えます。そして最後に
end
を付け加えます。すなわち

macro avg()
setscale/p x xcsr(A),xcsr(B)-xcsr(A),"ms" am
WaveStats/R=[pcsr(A),pcsr(B)] a
am=V_avg

end

となっているはずです。(マクロではコンパイルをしないはずなのだけれども、)したのcompileボタンをクリックします。

メニューで、macroのところをクリックするとavgという名前が出てきます。カーサーを動かした後、メニューでmacro -> avgをクリックしてみてください。コマンド入力からavg()としても同じです。

(5) ボタン ---より不精な人のために---


グラフ上にボタンがあるともっと便利だと思うでしょう。IGORではそのような不精な人のためのしくみが備わっています。グラフウィンドウを最前面にして、メニューからGraph -> Show Toolsでツールのアイコンをグラフの左に表示させます。ツールには二つのモードがあり、上のアイコンが黒くなっている時は、実際使用する実行モードであり、下のアイコンが黒くなっている時は、編集モードです。

メニューで、Graph -> Add Controls -> Add ButtonsでButton Control Dialogを開きます。名前、タイトル(ボタンに表示される文字)などを適当に設定します。そして、New Procedureボタンをクリックし、Save Procedure Nowをクリック。Procedure Windowに

Function ButtonProc(ctrlName) : ButtonControl
String ctrlName

End


とう内容の関数Functionが出来ているはずです。この関数は、ボタンがクリックされたときに呼ばれて実行される関数です。ここでは、コマンドにavg()と入力する変わりに、ボタンで済ませたいわけですから、ButtonProc関数の内容をavg()とすればよいわけです。が、ここでIGORの問題があります。関数からはマクロを呼べないというきそくがあります。(関数とマクロの違いについては後から述べることにします)。ここをすり抜けるためにexecuteという関数を使用します。
したがって、ButtonProc関数は、
Function ButtonProc(ctrlName) : ButtonControl
String ctrlName
execute "avg()"
End
となります。グラフのツールを編集モードから実行モードにして、ボタンがうまく働くか試してみてください。

[Previous] [Up] [Next]