LabTalkには、2Dまたは3Dグラフを作成および編集し、それらを画像または動画ファイルとしてエクスポートするために使用できる、多くのコマンド、オブジェクト、およびXファンクションがあります。
このチュートリアルでは、LabTalk スクリプトを使用して次のことを行う方法を説明します。
スクリプトは各サンプル内で順番に実行されるように設計されています。
2Dグラフ
// 新規ブックを作成し、Graph2Dと名前付け(ロングネームとショートネーム両方) newbook name:="Graph2D" option:=lsname; // ファイル名とフィルタ名を定義 string fname$ = system.path.program$ + "Samples\Graphing\Waterfall.dat"; string filtername$ = "waterfall.oif"; // Xファンクションimpfileを使用して、インポートフィルタで指定ファイルをインポート impfile fname:=fname$ filtername:=filtername$ location:=data orng:=[Graph2D]1!;
// ユーザ定義のRGBカラーで線とシンボルのXYプロットを作成 plotxy iy:=[Graph2D]1!(1,2) plot:=202 color:=color(255,0,255); // 文字列レジスタを使用して、作成したグラフのショートネームを取得 %A = %H;
plotxy iy:=[Graph2D]1!(1,126) plot:=202 ogl:=[%A]1!;
// ソースデータワークシートの範囲を定義 range rr = [Graph2D]1!; // 組み込みテンプレート '''doubleY'''を使用し、1列目をX、2列目をYとしてグラフの最初の (アクティブな) レイヤに線 + シンボルグラフをプロット plotxy iy:=%(rr)(1,2) plot:=202 ogl:=[<new template:=doubleY>]; // グラフの2番目のレイヤに折れ線グラフを追加。1列目をX、126列目をYに設定 plotxy iy:=%(rr)(1,126) plot:=200 ogl:=2!; //新しいグラフの名前を取得し、文字列変数 str1に保存 string str1$ = page.name$;
3Dグラフ
// 新しいワークブックを作成 newbook; // ファイル名を指定 string str2$ = "Samples\Matrix Conversion and Gridding\XYZ Random Gaussian.dat"; // ファイルパを含める string fname$ = system.path.program$ + str2$; // XファンクションimpASCでインポート impASC fname:=fname$; //文字列レジスタを使用してワークブック名を取得 %B = %H;
// 保存された文字列レジスタ変数を使って3番目の列をZに設定 %B!wks.col3.type = 6;
// データワークシートをアクティブにする win -a %B; // 選択したワークシートデータから3Dカラーマップ曲面グラフを作成 plotxyz iz:=3 plot:=103 ogl:=<new template:=glcmap>; //グラフウィンドウ名を文字列変数str3に保存 string str3$ = page.name$;
Note: worksheet -pコマンドを使用して2Dグラフと3Dグラフの両方を作成できますが、先にworksheet -sコマンドを使用して目的の入力データ範囲を選択する必要があります。
グラフウィンドウは、Pageオブジェクトに結びついたビジュアルページで構成されます。各グラフページには、少なくとも1つのビジュアルレイヤと、関連付けられたlayerオブジェクトが含まれます。グラフレイヤには、layerオブジェクトのサブオブジェクトであるlayer.xおよびlayer.yオブジェクトが関連付けられた一連のXY軸が含まれています。これらのオブジェクトへのLabTalkアクセスにより、ページ、レイヤ、軸のプロパティを制御できます。
データプロットを編集する場合、setコマンドを使用できます。グラフ上のテキストオブジェクトを編集場合には、 labelコマンドが役立ちます。
さらに、グラフを操作するためXファンクションも用意されています。
前セクションのプロジェクトファイルを引き続き使用していきます。
//グラフ ウィンドウをアクティブにする win -a %A; //Y軸のタイプをlog10に変更し、開始値0.003に変更 layer.y.type = 2; layer.y.from = .003; //Y軸のタイトルを"Amplitude"に変更 label -yl Amplitude; // X軸とY軸の右側のレイヤを表示 layer.x.showAxes = 3; layer.y.showAxes = 3; //X軸の主グリッドを破線で表示 layer.x.showGrids = 1; layer.x.grid.majorType = 2;
//最初に作成したグラフウィンドウがアクティブであることを確認 //既にアクティブになっている場合は、次の行の実行は不要 win -a %A; //2番目のデータプロットをアクティブにする layer.plot = 2; //シンボルの形状をCross(X)に設定 set %C -k 7; //プロット線の色を青に設定 set %C -cl 4; //シンボルの境界色をオリーブに設定 set %C -cse 12;
//二重Y軸グラフのレイヤ2にある第一データプロットの範囲を宣言 range r2 = [%(str1$)]2!1; //線を破線に設定 set r2 -d 1; //二重Y軸グラフのウィンドウをアクティブにして、変化を表示 win -a %(str1$);
//元データのワークシート範囲を事前定義 range rw=[Graph2D]1!; //最初に作成したグラフウィンドウがアクティブであることを確認 //既にアクティブになっている場合は、次の行の実行は不要 win -a %(str1$); //Xファンクションlegendupdateで凡例を更新 //凡例は最初のユーザ定義パラメータの名前 + 値 //@LD1 は最初のユーザ定義パラメーター legendupdate mode:=7 custom:="%(rw.UserParam1$)-@LD1";
//先ほど作成した3Dプロットのグラフウィンドウをアクティブに win -a %(str3$); //垂直方向に90度回転 layer -3d r V 90; //リフレッシュしてグラフ表示を確認 doc -uw;
画像としてエクスポート
XファンクションexpGraphを呼び出して、1つまたは複数のグラフを画像ファイルにエクスポートできます。画像ののエクスポート設定を制御するには、tr1またはtr2ツリーを使用できます。
doc -e P { expGraph type:=pdf filename:="<long name>-$(System.Date(),D11)" path:=%Y tr.Margin:=2 tr1.Unit:=2 tr1.Width:=600 tr2.TIF.DotsPerInch:=100 tr2.TIF.Compression:=LZW; }
|
スクリプトの記述を簡素化するには、 expGraphダイアログ (ファイル:グラフエクスポート)を開き、ダイアログの設定を変更して、ダイアログテーマの横にある三角形のボタンをクリックし、スクリプトの生成を選択して、同じ設定でLabTalkスクリプトを生成します。 |
動画のエクスポート
vwオブジェクトを使用して、グラフを動画としてエクスポートできます。
// MPEG4の圧縮方式を定義 int codec = vw.FourCC('F','M','P','4'); //この圧縮方法がサポートされているかどうかを確認 //サポートされていない場合、圧縮は使用されない if(vw.IsCodecInstalled(codec) == 0) codec = 0; //動画ファイル名を''<User Files Folder>\test.avi''で定義 //文字列レジスタ %Z を使用して、ファイル パスと名前を保存 %Z = %Ytest.avi; // ビデオ ライターを作成(fileName, codec, framesPerSec, width, height) int err = vw.Create(%Z, codec, 8, 1024, 768); if( 0 == err ) { //ソースデータワークシートの範囲を定義 win -a Graph2D; range rw1 = [Graph2D]1!; //最初のグラフを作成 plotxy iy:=%(rw1)2 plot:=200; //Y軸のスケールと増分を編集 layer.y.to = 3250; layer.y.inc = 500; //凡例を更新 legendupdate mode:=7 custom:="%(rw1.UserParam1$)-@LD1"; // 凡例を配置 legend.y = layer.y.to; legend.x = layer.x.to - legend.dx / 2; //ループを使用して、グラフ内のプロットデータを置き換え //各グラフをビデオのフレームとして追加 for(int a=3; a<=rw1.nCols; a++) { //現在表示されているデータセットの範囲を定義 range ra = %(rw1)col($(a-1)); //新しいデータセットの範囲を定義 range rb = %(rw1)col($(a)); //現在のデータプロットをクリア layer -e ra; //新しいデータセットをグラフに追加 layer -i rb; //Y軸のタイトルを変更 label -yl Amplitude; //グラフをリフレッシュ doc -uw; //グラフ ウィンドウ再描画を待つ // これにより動画ファイル作成中に動画を確認できる sec -pw %h; // 各グラフを2フレームとして動画に書き込み err = vw.WriteGraph(%h,2); if( err ) break; } //ビデオライターをリリース vw.Release(); if( err ) type "WriteGraph error $(err)"; } else type "VideoWriter Create error $(err).";