オフセットの付け方とマクロの適用 ーIgorの使い方ー

今回はグラフを作成する上で欠かせないデータへのオフセットの付け方とマクロ化するために必要な知識を扱います。

スポンサーリンク

オフセットの付け方

まずは下のようなグラフを作成しました。適当な三角関数のデータです。一つのグラフに複数のデータがある場合、データ同士にオフセットを付けて見やすくしたいことが多いと思います。

そのような際にはグラフ内でダブルクリックをして、下図の画面からOffsetのチェックボックスにチェックを入れます。

数のような画面になるので、数字を入れてオフセットをつけます。

X Offset X軸方向に足し算でオフセット
Y Offset Y軸方向に足し算でオフセット
X Mult X軸方向に掛け算でオフセット
Y Mult Y軸方向に掛け算でオフセット

通常はY軸方向にオフセットを付けるので、Y Offsetを使います。Y Multは対数グラフにオフセットを付けるときなどに便利です。

今、wave0にだけオフセットの値として2.5を入れ、二つのデータが重ならないようにしたグラフが下図です。

スポンサーリンク

オフセットを付けるのは面倒だがマクロ化には問題が

使っていると分かりますが、オフセットを付ける作業は面倒です。グラフの見栄えをよくする適切なオフセットの値がいくつなのか判別するために値を変える必要がありますし、データ数が多くなると一つ一つ変更する必要があります。

そこで、マクロの出番ですが、問題があります。

先程のオフセットを変更した際にはCommand Windowには以下のようなコマンドが入力されているはずです。

ModifyGraph offset(wave0)={0,2.5}

wave0がオフセットをつけたデータ名です。

{0, 2.5}の部分が、X方向に0、Y方向に2.5オフセットをつけるという命令になります。ここで、wave0の部分と2.5の部分は可変にしたい箇所です。このままマクロに流用しても、wave0という名前のデータにしか適用できませんし、オフセットの値は2.5のままです。

つまり、オフセットの値を入力できるようにする必要がありますし(変数にする)、グラフに表示されているうウェーブの名前が必要です。

マクロを使ったオフセットの付け方

Procedure Windowで以下のようなマクロを書いてみてください。

結論から言ってしまえば、下記のようなマクロを使えば、オフセットを付けることが可能です。

Macro TestOffset(varNum)
Variable varNum
		Prompt varNum, "Offset?"
	
String WN
		String WNdwn
		Variable n = 0
		Variable Y_Offset = 0
	
	do
			WN = WaveName("",n,1)
			ModifyGraph offset($WN)={0,Y_Offset}	
			Y_Offset =Y_Offset+varNum
		n+=1			
		while( WaveExists( $WaveName("",n,1) ) != 0 )
		

	
EndMacro

マクロの説明

マクロでの変数の使い方

マクロ内で変数を使いたい場合は数多くあると思います。今回の場合で言えば、オフセットを掛ける数字を指定したいでしょう。

そのような場合、冒頭のマクロのカッコ内に変数をいれます。

Macro TestOffset(varNum)

上記でTestOffset(varNum)の(varNum)の部分が変数にあたります。
このような書き方をすることで、このマクロの中で変数を使いますよという宣言になります。

変数の指定の仕方

マクロで変数を使うことを宣言したわけですが、実際に具体的な数字を入れなければ意味がありません。その方法が二つあります。

数字を入れてコマンドラインで実行

今の場合で言えば、データ一つ一つに10のオフセットを付けたい場合(varnumの値を10にする)であれば

TestOffset(10)

とコマンドラインに入力し、Enterを押して実行すればできます。

ダイアローグで入力する

もう一つの入力方法がダイアローグを使う方法です。変数を入力せずに、メニューのMacrosからマクロを選んで実行した場合、変数の値を入力するためのダイアローグが立ち上がります。

今のマクロであれば、上記のように「Offset?」と値を聞かれます。0のところを書き換えるとvarNumの値が変更できます。

このダイアローグの表示に該当するマクロ部分が以下になります。

Variable varNum
		Prompt varNum, "Offset?"
Variable varNum

の部分が変数を定義しており、

Prompt varNum, "Offset?"

が値を聞くダイアローグです。Prompt varNumの部分がダイアローグを作っており、 ”offset?”の部分が入力を促すコメントになります。

これでマクロ内に自分が決めた変数の値を読み込ませる方法が分かったと思います。次はデータの名前の取得です。

グラフ内のWaveの名前の取得

グラフ内のデータにオフセットを付けるためにはデータ(Wave)の名前を取得する必要があります。これにはWaveName関数を使います。

WaveName("ウインドウの名前",何番目のWaveか,データのタイプ)

WaveNameは3つの変数で定義された文字列になります。変数は最初がデータの名前を知りたいWindowの名前ですが、最前面にあるグラフやテーブルであれば””とだけ記入し何も記入しなくていいです。もし、Graph0のデータ名が知りたければ、”Graph0″と入力します。

二つ目の変数のWaveの何番目かというのはデフォルトではグラフ内に描画した順番で決まっています。メニューのGraph →reorder tracesを見ると確認でき、順番も変えられます。

データのタイプはグラフの場合は1-3まであり、1がY、2がX、3がX及びY(両方)です。今はY軸にオフセットを付けたいので、1を選びます。

この関数を使えば、オフセットを掛けたいデータの名前を取得できるので、後は順番にvarnumずつずらしていけばオフセットが掛けられます。

その具体的な記述が以下になります。

Variable n = 0
		Variable Y_Offset = 0
	
	do
			WN = WaveName("",n,1)
			ModifyGraph offset($WN)={0,Y_Offset}	
			Y_Offset =Y_Offset+varNum
		n+=1			
		while( WaveExists( $WaveName("",n,1) ) != 0 )

通常のループ文ですので、プログラミングが少しわかる人であれば問題ないと思いますが、いくつか注意するべきポイントがあります。

まずは$マークです。今、WN=wave0とした場合には、$WNはWNの中身である”wave0″という文字列を示します。WNは文字列の名前であり、$WNは文字列の中身です。この違いは大切です。

次にループを止めるWhileの中身です。WaveExist関数はある名前のWaveが存在するかどうかを判定する関数です(存在すれば1,存在しなければ0)。いま、nがプロットしているデータの数に達すると、この判定が0になるので、ループが止まります。

まとめ

グラフにオフセットを付ける作業は面倒くさく、マクロを利用したい作業だと思います。本記事では、Igorでグラフにオフセットを付ける基本操作のやり方に加え、マクロ化に必須の変数の利用Wave名の取得について説明しました。他の様々なマクロにも応用が可能ですので、ぜひ役立ててください。

コメント

タイトルとURLをコピーしました