スクリプターズ クラブの記録: グラフ ビルダーでの JSLビデオ 1
プレゼンター@Emmanuel_Romeu
ビデオ 2
プレゼンター: @jthi
Re: Scripters Club レコーディング: グラフ ビルダーでの JSL使用したスクリプト
Re: Scripters Club レコーディング: グラフ ビルダーでの JSLTeamsチャットからの質問がいくつか
質問1:
対応するXpathコマンドはありますか?
Dispatch( {}, "X title", TextEditBox,
回答1:
確認する最も簡単な方法は、<< Get XML を使用して、そこから「X title」が見つかるかどうかを確認することです。見つかりません (これらの「表示要素」は helpKey 属性と同じである可能性がありますが、すべてに追加されているわけではありません)。


ただし、軸テキスト編集ボックスを取得するために複雑な XPath を構築できます (最初は常に X 軸だと思います)。
GraphBuilderAxisBox <GRAPHBUILDERCOMPONENTBOX leftoffset="47" topoffset="435" width="478" height="19">
<GRAPHBUILDERTITLEBOX width="478" height="19">
<TEXTEDITBOX leftoffset="223" topoffset="0" width="31" height="19">My X</TEXTEDITBOX>
</GRAPHBUILDERTITLEBOX>
</GRAPHBUILDERCOMPONENTBOX>
<GRAPHBUILDERCOMPONENTBOX leftoffset="47" topoffset="408" width="478" height="27">
<GRAPHBUILDERAXISBOX width="478" height="27">
<AXISBOX width="478" height="27" charid="1000"></AXISBOX>
</GRAPHBUILDERAXISBOX>
</GRAPHBUILDERCOMPONENTBOX>
GraphBuilderComponentBox + GraphBuilderAxisBoxと先行するGraphBuilderComponentBox + GraphBuilderTitleBoxを見つけることでXPathを構築できます。
//GraphBuilderComponentBox[GraphBuilderAxisBox]/preceding-sibling::GraphBuilderComponentBox[1]/GraphBuilderTitleBox/TextEditBox
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Size(525, 454),
Show Control Panel(0),
Variables(X(:weight), Y(:height)),
Elements(Points(X, Y, Legend(3))),
SendToReport(
Dispatch({}, "X title", TextEditBox, {Set Text("My X")}),
Dispatch({}, "Y title", TextEditBox, {Set Text("My Y")})
)
);
nw = New Window("gbscript", << type("Script"), << Language("XML"),
Report(gb) << Get XML;
);
axis_title_tebs = Report(gb) << XPath("//GraphBuilderComponentBox[GraphBuilderAxisBox]/preceding-sibling::GraphBuilderComponentBox[1]/GraphBuilderTitleBox/TextEditBox");
axis_title_tebs[1] << Set Text("XXXXX");
axis_title_tebs[2] << Set Text("YYYYY");
Write();
質問2:
ただし、この質問はグラフ ビルダーに関係しており、スクリプトに直接関係するものではありません。グラフ内のサンプルを強調表示または識別する方法を教えてください。また、サンプルの 1 つだけにラベルを追加したり、さらに特定のサンプルにラベルを追加したりする方法を教えてください。
回答2:
データの種類 (および JMP のバージョン) によって、必要なラベル付け手法も異なります。最悪の場合、スクリプト化が必要になることもありますが、通常は必要ありません。
私はJMP18とシンプルなデータを前提とします。このようなグラフがあり、強調表示されたポイントにラベルを付けて色を付けたいと考えています。

その行にラベルを付け、色の行状態を追加するだけで、このように強調表示されます。

このアドインは、Column Quick Swapper とも呼ばれ、グラフビルダーで複数の Y 軸と X 軸の列を簡単に変更できます。
Re: Scripters Club レコーディング: グラフ ビルダーでの JSL回答ありがとうございます。
なぜ次のようなものはないのだろうか:
current report() << XPath("//TextEditBox[@type='X title']")
実際の応用例:
2 つの x 軸ラベルと 2 つの y 軸ラベルを持つグラフの下部の Y 軸タイトルを取得します。
Dispatch( {}, "Y 1 title", TextEditBox,このリストの正しいエントリを推測することに比べれば素晴らしいことです:
axis_title_tebs = Report(gb) << XPath("//GraphBuilderComponentBox[GraphBuilderAxisBox]/preceding-sibling::GraphBuilderComponentBox[1]/GraphBuilderTitleBox/TextEditBox");
Re: Scripters Club レコーディング: グラフ ビルダーでの JSLそれでもかなり頑丈にできる
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Size(528, 448),
Show Control Panel(0),
Variables(X(:sex), X(:age), Y(:weight), Y(:height), Overlay(:sex)),
Elements(Position(1, 1), Points(X, Y, Legend(24))),
Elements(Position(1, 2), Points(X, Y, Legend(25))),
Elements(Position(2, 1), Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11))),
Elements(
Position(2, 2),
Points(X, Y, Legend(16)),
Line Of Fit(X, Y, Legend(17))
)
);
axis_title_tebs = Report(gb) << XPath("//GraphBuilderComponentBox[GraphBuilderAxisBox]/preceding-sibling::GraphBuilderComponentBox[1]/GraphBuilderTitleBox/TextEditBox");
xcount = gb << Get N Positions("X");
firstyaxis = axis_title_tebs[xcount + 1];
Show(firstyaxis << get text);
Write();
残念ながら、これは「Y タイトル」ではなく「Y 1 タイトル」です (または、常に「Y 1 タイトル」であるべきで、「Y タイトル」だけであるべきではないかもしれません)。そのため、Y 軸が 1 つまたは複数ある場合は異なります。
Re: Scripters Club レコーディング: グラフ ビルダーでの JSLうーん...
このボーナス分析チャレンジを「無料で」受けるのはいつも楽しいです
- 分析以外に「報酬」が支払われます;)
Re: Scripters Club レコーディング: グラフ ビルダーでの JSLスクリプト ガイドからのリンクはいくつかあります (グラフ ビルダーの JSL に必ずしも直接関係しているわけではありません)
Re: Scripters Club レコーディング: グラフ ビルダーでの JSLJMP18 以降、By 変数の動作は少し異なり、新しいオプションがあります。By 変数を頻繁に使用する場合は、スクリプト インデックスからグループ プラットフォームを確認することをお勧めします。たとえば、これには「グループ プラットフォーム」が含まれており、どの参照を取得するか (最高レベルまたはリスト内のすべてのプラットフォーム) を制御できるため、時々役立つ場合があります。

Whereステートメントを使用した値によるフィルタリング(jmp.com)でも、同様の考慮事項があります。そのような考慮事項の1つは、どのデータテーブルを使用しているか、またはどのwhere式を使用しているかです。
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gbs = dt << Graph Builder(
Variables(X(:weight), Y(:height)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11))),
By(:sex)
);
gb = dt << Graph Builder(
Variables(X(:weight), Y(:height)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11))),
Where(:sex == "F");
);
show(gbs << Get Data Table);
show(gb << Get Data Table);
show(gbs << Get Where Expr);
show(gb << Get Where Expr);
private_tables = Find All(Data Tables, Private);
Show(private_tables << get name);
Show(private_tables << Is Linked Subset);
gbs << Get Data Table = {DataTable("sex=F"), DataTable("sex=M")};
gb << Get Data Table = DataTable("Big Class, where -sex == -F- 3");
gbs << Get Where Expr = {:sex == "F", :sex == "M"};
gb << Get Where Expr = :sex == "F";
private_tables << get name = {"sex=F", "sex=M", "Big Class, where -sex == -F-", "Big Class, where -sex == -F- 2", "Big Class, where -sex == -F- 3"};
private_tables << Is Linked Subset = {1, 1, 1, 1, 1};