ティスプレイ参照を使って、Sendまたは<<演算子を使ったディスプレイ要素にメッセージを送ることができます。たとえば、out2がアウトラインノードの参照である場合、開いているときは閉じるよう、out2自体に要求することができます。
out2 << Close(); // アウトラインノードを閉じる
Close()は、赤い三角ボタンのメニューで項目を選択する場合と同様、アウトラインノードの開閉を交互に切り替えます。「閉じるまたは閉じたまま」にするには1、「開くまたは開いたまま」にするには0を指定します。
rbiv["平均のあてはめ"] << Close; // 開閉を交互に切り替える
rbiv["平均のあてはめ"] << Close( 1 ); // 閉じるまたは閉じたままにする
rbiv["平均のあてはめ"] << Close( 0 ); // 開くまたは開いたままにする
send(<<)演算子を使ってディスプレイボックスにメッセージを送ることができます。この演算子を使うと、指定されているものが、それに含まれる子オブジェクトなのか、それともオプションなのかを明確に区別することができます。また、グラフ内において、どれがオプションで、どれが実行されるスクリプトであるのかも明確にできます。
win = New Window( "メッセージ",
gb = Graph Box(
Frame Size( 400, 400 ),
X Scale( 0, 25 ),
Y Scale( 0, 25 )
)
);
gb << Background Color( "red" );
メッセージを組み合わせる(または入れ子にする)と、左から右へとメッセージが評価されます。
•
|
次の式は、message1をboxへ、次にmessage2をboxへ、最後にmessage3をboxへ送ります。次のメッセージが送られる時点で、前のメッセージによりboxが変更されている可能性があります。
|
box << message1 << message2 << message3;
•
|
( (box << message1) << message2) << message3
•
|
message3の結果が変数xに割り当てられます。
|
x = box << message1 << message2 << message3;
win = New Window( "メッセージ", gb = Graph Box() );
sz = gb << Background Color( "red" )
// message 1は背景色を設定する
<<Save Picture( "$DOCUMENTS/red.png", "png" )
// message 2はグラフボックスをPNGファイルとして保存する
<<Background Color( "white" )
// message 3はグラフボックスの背景色を白に設定する
<<Get Size();
// message 4はグラフボックスのサイズを戻し、ログに出力する
Send To Report()とDispatch()の各関数は、ディスプレイボックスの編集内容を分析スクリプトの中に埋め込んで記録します。たとえば、2つの関数に含まれる引数で、アウトラインノードの開閉、グラフフレームのサイズ変更、グラフフレーム内の色のカスタマイズなどを実行できます。JSLステートメントで引数を指定することもできます。
Send To Report()は、ディスプレイツリーを変更するオプションのリストを含みます。
Dispatch()は、ディスプレイツリーを変更する4つの引数を含みます。
たとえば、Big Class.jmpを開き、そこに保存されている「二変量の関係(二変量)」スクリプトを実行します。これにより、あてはめた直線のレポートが生成されます。「あてはまりの悪さ(LOF)」アウトラインノードを開き、「分散分析」アウトラインノードを閉じます。[スクリプトの保存]>[スクリプトウィンドウへ]を選択します。スクリプトエディタウィンドウに次のスクリプトが表示されます。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = dt << Bivariate(
Y( :weight ),
X( :height ),
Fit Line(),
SendToReport(
Dispatch(
{"Linear Fit"},
"Lack Of Fit",
OutlineBox,
{Close( 0 )} ),
Dispatch(
{"Linear Fit"},
"Analysis of Variance",
OutlineBox,
{Close( 1 )}
)
)
);
Send To Report()関数は、デフォルトのレポートをカスタマイズする2つのDispatch()関数を含みます。
•
|
第4引数は、このアウトラインボックスに送る引数です。この例では、メッセージはClose(0)、つまりノードを開くコマンドです。
|
Send to Report()とDispatch()を効果的に使用するには、まず、対話式にレポートをカスタマイズします。レポートをスクリプトとして保存し、JMPによって生成されたそのスクリプトを確認します。JMP自身が、実は最高のJSLプログラマーなのです。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = dt << Bivariate( Y( :Name("体重(ポンド)")), X( :Name("身長(インチ)")));
rbiv = biv << Report;
rbiv << Journal Window;
rbiv << Save Journal(
"$DOCUMENTS/test.jrn"
);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = dt << Bivariate(
Y( :Name("体重(ポンド)") ),
X( :Name("身長(インチ)") ),
By( :性別 )
);
( ( Report( biv[1] ) << Parent ) << Parent ) <<
Save Journal( "test.jrn" );
ディスプレイボックステーブルの数値列を更新するには、Set Valuesメッセージを使います。
win = New Window( "数値列",
num = Number Col Box( "値", [9, 10, 11] )
);
num << Set Values( [1, 2, 3] );
数値列に桁区切りを追加するには、Set Formatメッセージを使用します。
New Window( "例",
ncb = Number Col Box( "乱数",
{Random Uniform(), Random Uniform() * 10,
Random Uniform() * 100, Random Uniform() * 1000,
Random Uniform() * 10000}
)
);
ncb << Set Format(10.3, "Fixed Dec", "Use thousands separator");
ディスプレイボックステーブルの文字列の列を更新するには、Set Valuesメッセージを使います。
win = New Window( "文字列",
str = String Col Box( "値", {"a", "b", "c"} )
);
str << Set Values( {"A", "B", "C"} );
通常、Text Box()内ではテキストは自動的に改行されます。ただし、Set Wrap (n)メッセージを使うと、デフォルトの改行ポイントを上書きすることができます。次のスクリプトは、200ピクセルの地点でテキストを折り返します。
win = New Window( "テキストの折り返し幅",
tb = Text Box(
"データ点にカーソルを置くと情報が表示されます。"
)
);
tb << Set Wrap( 200 );
箇条書きにするには、Bullet Point(1)メッセージを使います。
win = New Window( "箇条書きのリスト",
text1 = Text Box( "データ点にカーソルを置くと情報が表示されます。" ),
text2 = Text Box( "統計量の上でカーソルを丸く動かすと情報が表示されます。" )
);
text1 << Bullet Point( 1 );
text2 << Bullet Point( 1 );
Bullet Point( 1 )メッセージをテキストボックスに送ると、テキストの前に中黒が挿入され、テキストボックス内の後続の行はインデントされます。
Bullet Point( 1 )メッセージは、次の例のようにインラインで使用することもできます。
text1 = Text Box( "データ点にカーソルを置くと情報が表示されます。" ), << Bullet Point( 1 ) ),
Select、Reshow、およびDeselectを使うと、ディスプレイボックス上で選択を示す強調表示を点滅させたり解除させたりすることができます。前述のように、複数の<<節を一緒に並べて、1つのオブジェクトに複数のメッセージを1行で送ることができます。結果は左から右に読んでいきます。たとえば、次の例の場合、まず、Selectが処理され、次にReshow、その次にDeselect、その次にもう一つのReshowが処理されます。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = dt << Bivariate(
Y( :weight ),
X( :height ),
Fit Mean( )
);
rbiv = biv << Report;
// 二変量の分析レイヤーをrbivに割り当てる
out2 = rbiv[Outline Box( "平均 ?" )];
out2 << Close( 0 ); // アウトラインボックスを開く
// rbivレポート内で指定の文字列を含む
// アウトラインボックスを見つけ、それをout2変数に割り当てる
scbx = rbiv[String Col Box( 1 )];
// rbivの最初の文字列ボックスを見つけ、
// scbx 変数に割り当てる
Wait( .25 ); // 0.25秒待機する
For( i = 0, i < 20, i++,
// i を0に設定し、20回ループする
scbx << Select << Reshow << Deselect << Reshow
// 文字列ボックスを選択して再表示し、
// 選択を解除して再表示する
);
見出しは、デフォルトで網掛けと枠線がついています。これらをオフにするには、Set Shade Headings ( 0 )メッセージとSet Heading Column Borders ( 0 )メッセージを使用します。次の例は、網掛けと枠線をそれぞれオンからオフにしたときの違いを示しています。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Summarize(
meanHt = Mean( Name("身長(インチ)")),
minHt = Min( Name("身長(インチ)") ),
maxHt = Max( Name("身長(インチ)") ),
);
win = New Window( " 要約の結果",
tb = Table Box(
Number Col Box( "平均", meanHt ),
Number Col Box( "最小値", minHt ),
Number Col Box( "最大値", maxHt )
)
);
Wait( 2 );
tb << Set Shade Headings( 0 );
Wait( 1 );
tb << Set Heading Column Borders( 0 );
Wait( 2 );
tb << Set Shade Headings( 1 );
Wait( 1 );