こんにちは。 グラフビルダーウィンドウで使用される変数名と役割を取得する方法はありますか? グラフ ビルダー プロットを含むウィンドウがあるとします。 X、Y、Xgroup、Ygroup などにどの変数が使用されたかをプログラムで判断する方法はありますか?
たとえば、ユーザーが gb でプロットを作成したとします。 ここで、プロット上で一般化されたスクリプト (グラフィックス スクリプトなど) を実行したいと考えています。 スクリプトは、ユーザーが指示しなくても、どの変数がどの役割で使用されたかを知る必要があります。
このプロットから始めるとします。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Variables(X(:height), Y(:weight)),
Elements(Points(X, Y), Smoother(X, Y))
);
次に、結果として得られたプロットに対してスクリプトを実行したいと思います。 私のスクリプトはプロットに何が含まれているかを認識していません。 私が試してみたがうまくいかなかったことが2つあります:
Names Default to Here(1);
//Try to get script used to create plot
win = Window(1); //gets most recent window clicked on
gb = win << Report; //DNW: returns missing (win is not a platform)
scr = gb << Get Script; //from here I could parse the string to determine the roles
//Another stab: try to read the XML
win = Window(1);
str = win << Get XML; //This gives me the XML of the window, but does not provide the actual variable names used in the roles.
ウィンドウ参照をレポートに変換する方法を理解できれば、最初の方法を機能させることができると思います。 何か案は?
</CODE></P></LINGO-BODY><LINGO-LABS id="lingo-labs-272624" slang="en-US" mode="NONE"><LINGO-LABEL>高度な統計モデリング</LINGO-LABEL><LINGO-LABEL>マスカスタマイゼーション</LINGO-LABEL><LINGO-LABEL>品質およびプロセスエンジニアリング</LINGO-LABEL></LINGO-LABS><LINGO-SUB id="lingo-sub-273136" slang="en-US" mode="NONE">Re: グラフビルダーから変数名を取得する</LINGO-SUB><LINGO-BODY id="lingo-body-273136" slang="en-US" mode="NONE">ありがとう。 それはまさに私が必要としていたものでした。</LINGO-BODY><LINGO-SUB id="lingo-sub-273026" slang="en-US" mode="NONE">Re: グラフビルダーから変数名を取得する</LINGO-SUB><LINGO-BODY id="lingo-body-273026" slang="en-US" mode="NONE"><P><A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/3648" target="_blank">@ニクルズ</A>おっしゃるとおり、ホバー ラベル機能は対話性に基づいています。 JSL を使用してこれをトリガーする方法 (マウスを移動する、一時停止するなど) もありますが、実際には必要のない複雑さがソリューションに大幅に追加されます。</P>
<P>への返信と提案された解決策に基づいて、<A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/2687" target="_blank"> @txnelson</A> , これは、Windows 参照からグラフ ビルダー変数参照までを移動するスクリプトです。</P>
<PRE><CODE class=" language-jsl">Names Default to Here(1);
win = New Window("A Title", // Let's create a Window that contains a Graph Builder
Graph Builder( // with a LDF to make things interesting (multiple OutlineBoxes).
Size( 517, 448 ),
Show Control Panel( 0 ),
Variables( X( :sex ), Y( :height ) ),
Elements( Bar( X, Y, Legend( 6 ) ) ),
Local Data Filter(
Add Filter( columns( :height ), Where( :height >= 60.048 & :height <= 70 ) )
)
));
ob = win[OutlineBox("Graph Builder")]; // This is how you get the Display Box that contains the GB object
gbb = ob << Get Scriptable Object; // Now we extract the GB object from the Display Box
gb_expr = gbb << Get Script; // You could wrap in Char() to get the GB script as a string
gb_nargs = NArg(gb_expr); // and use pattern matching. Instead,
for(i = 1, i <= gb_nargs, i++, // let's see how to inspect it as an expression.
child = Arg(gb_expr, i);
If (HeadName(child) == "Variables",
var_nargs = NArg(child);
for(j = 1, j <= var_nargs, j++,
Show(Arg(child, j))
);
Break();
)
);
君は見るべきだ:
Arg(child, j) = X(:sex);
Arg(child, j) = Y(:height);
JMP 15 で追加されたホバー ラベル拡張機能を使用すると、グラフのコンテキスト (正確にはホバー ラベル実行コンテキスト) で実行されるスクリプトを定義できます。 このコンテキストは、どの変数が「グループ化」 (X、GroupX、GroupY など) として使用されているか、および測定値 (Y、色、サイズなど) を含む、ホバーされているビジュアル要素に関する情報をローカル変数で提供します。
独自のスクリプトでこれらの変数にアクセスし、それらを使用して新しい視覚化や分析を定義することができます。 これはまさにホバー ラベル プリセットの動作方法です。 1 つを選択し、ホバー ラベル エディターで (またはスクリプトを保存して) 生成された JSL コードを見て例を確認するとよいでしょう。
テキストレットの「コンテキスト」プリセット (ホバー ラベル エディターの [テキストレット] パネルから利用可能) を使用して、その値を確認することもできます。

実行コンテキストで使用できる変数の完全なリストが表示されます。ここ。
これに関する以前の質問を覚えていると思いましたが、検索しましたが見つかりませんでした。とにかく、この種のことを行うために私が使用した方法は、メッセージをグラフ ビルダーに送信して、表示の作成に使用されたスクリプトを文字変数に取得し、文字列を解析して前述の変数を見つけることです。 。
スクリプト
names default to here(1);
dt=open("$SAMPLE_DATA/big class.jmp");
gb = Graph Builder(
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 6 ) ), Smoother( X, Y, Legend( 7 ) ) )
);
theScript = char(gb << get script);
show(theScript);
取得するもの:
theScript = "Graph Builder(Variables(X(:weight), Y(:height)), Elements(Points(X, Y, Legend(6)), Smoother(X, Y, Legend(7))))";