グラフィックオブジェクトの作成とアクセス

目次

図形オブジェクトは、線、連続直線、矩形、円、多角形、矢印、テキスト、イメージなど多くの種類があります。オブジェクトを作成し、レイヤに接続すると、 list -o コマンドを実行することで見ることができます。次のセクションは、LabTalkでオブジェクトを作成、変更、削除する方法を示しています。

オブジェクトを作成する

テキストラベルを作成する

ラベルは、図形オブジェクトの1つで Label コマンドを使って作成されます。label -nを使用してラベルを作成する時に特に名前を指定しない場合、Originはラベルを"Textn"と表記します。この場合、nは作成インデックスです。

文字列内に エクスケープシーケンス を使って、テキスト表示をカスタマイズすることができます。これらのエスケープシーケンスの先頭には円記号(\)が付きます。次のスクリプトを入力し、これらのエスケープシーケンスがどのような動作をするかを見てみましょう。ラベルテキストにスペースや改行がある場合、二重引用符でテキストを囲みます。

label "太字にするには、\b(Bold Text)
下付き、上付き文字にするには X\=(\i(i), 2) 
斜体にするには \i(Italic Text) 
上線付き文字にするには \ab(Text with Overbar) 
また、文字に色を付けるには \c4(Color Text) を使用します";


次のスクリプトは、アクティブグラフウィンドウにbook3のsheet1の列1の5行目の値を新しいテキストラベルとして作成します。 これは文字列と数値の両方に対して有効です。

label -s %([book3]Sheet1,1,5);

次のスクリプトは、アクティブグラフウィンドウにbook1のsheet2の列2の1行目の値を新しいテキストラベルとして作成します。 cell(i,j) 関数が行番号を最初の引数として取る点で、上記の例とは異なっていることに注意して下さい。 数値のセルにのみ動作します。

label -s $([book1]Sheet2!cell(1,2));

さらに、ワークシートセルの値をラベルの内容に指定できます。次のスクリプトは、アクティブグラフウィンドウにbook1のsheet2の列2の1行目の値を新しいテキストラベルとして作成します。 値は、有効桁数4桁で表示されます。

label -s $([book1]Sheet2!cell(1,2), *4);

%( )表記は、完全な精度で値をフォーマットしたり、表示しません。 数値をフォーマットする場合、$( )表記を使う必要があります。

凡例を作成する

グラフの凡例は、オブジェクト名がLegendであるテキストラベルです。 これには、すべてのグラフィックオブジェクトに共通のプロパティがあります。 凡例のすべてのプロパティの一覧を出力するには、次のように入力します。

legend.=

図形オブジェクトのオブジェクト名を表示するには、右クリックしてオブジェクトのプログラム制御を選択します。

グラフの凡例を更新したり、再構築するには、 legendupdate Xファンクションを使います。このシンタックスは次のようになります。

legendupdate [mode:=optionName]

角括弧はmodeが任意であることを示し、legendupdate を次のように使用することができます。

legendupdate;

これは、デフォルトの凡例の設定(ショートネーム)を使用するか、またはmodeを使って、表示したい項目を指定しします。

legendupdate mode:=0;

これは、プロットされたデータ列に対して再生成した凡例内にコメントフィールドを表示します。 利用可能なすべてのmodeは、 ヘルプ: X-Functions: legendupdate:

modeはインデックスまたは名前を指定して、Xファンクションを呼び出すことができます。

legendupdate mode:=comment;
legendupdate mode:=0;

は同じで、同じ結果となります。

custom 凡例オプションは以下のサンプルのように追加の引数が必要です。

legendupdate mode:=custom custom:=@WS;

利用可能なすべてのcustom凡例オプションは、テキストラベルオプションにあります。

次のサンプルは、これらの関数およびコマンドを使って、凡例を更新する方法を示しています。

// サンプルデータのインポート
newbook;
string fn$ = system.path.program$ +
        "Samples\Curve Fitting\Enzyme.dat";
impasc fname:=fn$;
string bn$ = %H;
// 2パネルのグラフを作成
newpanel 1 2;
// レイヤにデータプロットを追加
for (ii=1; ii<=2; ii++)
{
        plotxy iy:=[bn$]1!wcol(ii+1) plot:=201 ogl:=$(ii);
}
// ページ全体の凡例をワークシートコメント+単位で更新
legendupdate dest:=0 update:=0 mode:=custom custom:=@ln;
// 各レイヤごとに凡例の設定を変更
doc -e LW {
        // 凡例のフォントサイズを変更
        legend.fsize = 28;
        // 凡例のフォントの色を変更
        legend.color = color(blue);
        // 凡例をレイヤの左上に移動
        legend.x = layer.x.from + legend.dx / 2;
        legend.y = layer.y.to - legend.dy / 2;
};

Note: 凡例のテキストを修正するために、 label コマンドを使うこともできます。 これを使うための理由は、各データプロットの複数のテキストエントリを表示するかどうかです。 下記のスクリプトは、ワークシート名とX例のコメントの両方を表示する凡例テキストを更新します。

label -sl -n legend "\l(1) %(1, @WS) %(1X, @LC)";

線を作成する

線や矩形のようなオブジェクトは、図形オブジェクトといい、 draw コマンドを使ってこれらを作成できます。

以下のサンプルでは、 -l および -v スイッチを使って、垂直線を描画する方法を見ることができます。X軸の中央で線が描画され、X1 と X2 は システム変数 で、それぞれX開始値とX終了値を保存しています。

draw -l -v (X1+(X2-X1)/2);

移動可能な線を作成するには、 -lm スイッチを使います。

draw -lm -v (X1+(X2-X1)/2);

オブジェクトを操作する

オブジェクトの位置

オブジェクトの位置は、それを作成したときまたはオブジェクトプロパティを変更したときのどちらかで制御できます。次の表はこれらのプロパティとコマンドがどのように動作するのかを示しています。

プロパティ / コマンド 単位 参照点
label -p パーセンテージ 左上
label -px スクリーンのピクセル 左上
object.top / object.left ページのピクセル 左上
object.x / object.y レイヤの座標 オブジェクトの中心
object.x1 / object.y1 レイヤの座標 左上
Note: ページのピクセルは、作図の詳細ダイアログの印刷/ページサイズ タブにあります。

例えば、

win -T Plot; // 空のグラフを作成
// レイヤ中央にテキストオブジェクトを作成し、
// "MyText"という名を付け、テキストは"Hello World"にする
label -p 50 50 -n MyText Hello World;
sec -p 1;
// ラベルを(1, 5)に配置
MyText.x1 = 1;
MyText.y1 = 5;

オブジェクトプロパティの変更

すべての図形オブジェクトobjectName.property= を使って、オブジェクトプロパティを取得またはセットできます。object.xobject.y のプロパティは、オブジェクトの中心の x および y 位置で、object.dxobject.dy はオブジェクトの幅と高さを指定します。これら4つのプロパティは、軸単位を使ったすべてなので、これら4つのプロパティとlayer.axis.fromlayer.axis.to を組み合わせて、レイヤの適切な位置に凡例を配置できます。

次のスクリプトサンプルは、ラベルプロパティを使ってラベルを配置する方法を示しています。

// サンプルデータをインポート
newbook;
string fname$ = system.path.program$ +
        "Samples\Curve Fitting\Enzyme.dat";
impasc;
string bn$ = %H;
plotxy ((,2), (,3));
// "title"という名前のラベルを作成
// オプションリストの順であることに注意、 -n は最後のオプション
// -j はテキストを中心揃えにするため使用
// -s は置換表記を有効化
// -sa は \n (新しい線)の変換を有効化
// 置換は列のコメントからテキストを取得するのに使用
label -j 1 -s -sa -n title
  Enzyme Reaction Velocity\n%([bn$]1!col(2)[c]$) vs. %([bn$]1!col(3)[c]$);
// フォントをセット
title.font=font(Times New Roman);
// ラベルのフォントサイズをセット
title.fsize = 28;
// ラベルのフォント色をセット
title.color = color(blue);
// ラベルを置く
title.x = layer.x.from + (layer.x.to - layer.x.from) / 2;
title.y = layer.y.to + title.dy / 2;
// 凡例を置く
legend.y = layer.y.from + (layer.y.to - layer.y.from) / 2;
legend.x = layer.x.to - legend.dx / 2;

特別なテキストオブジェクトを編集

Originには、システムで事前に定義された特別なテキストオブジェクトがいくつかあり、これは、以下の軸タイトルのようにグラフレイヤ上にも配置されています。

オブジェクト オブジェクト名
下X軸タイトル xb
上X軸タイトル xt
左Y軸タイトル yl
右Y軸タイトル yr
背面Z軸タイトル zb
正面Z軸タイトル zf

これらの特別なオブジェクトでも、objectName.property= を使ったプロパティの取得と設定が可能です。

xb.fsize = 20; // 下X軸タイトルのフォントサイズを設定
yl.fillcolor=2; //左Y軸に枠線を追加し赤色で塗りつぶす
yl.transparency=50;//透過率を50%に設定

軸タイトルの枠の塗りつぶし色は、組み込み色の整数値で設定できます。

オブジェクトを削除する

オブジェクトを削除するには、-r, -ra, -rc スイッチを付けて label コマンドを使います。

スイッチ 説明
label -r objectName 指定したオブジェクトを削除
label -ra objectNamePrefix objectNamePrefixで始まる名前を持つすべてのオブジェクトを削除
label -rc objectName 接続されたオブジェクトと一緒に指定したオブジェクトを削除