グラフビルダーにY変数をリストとして指定した場合に、箱ひげ図を点に追加するにはどうすればよいですか?次のスクリプト例は、前のスレッド(解決しました、おかげで@jthi ) 私のものでは、Y 変数をリストの点としてプロットできます。
追加したい箱ひげ図に加えてポイント私のチャートでは。 以下のスクリプトに箱ひげ図を追加するにはどうすればよいですか?
Names Default To Here(1);
dt = Open("$sample_data\Big Class.jmp");
y_values = {"name", "age", "sex", "weight"};
variables_expr = Expr(Variables(X(:height)));
For Each({y_col}, y_values,
temp_expr = Expr(Y());
Insert Into(temp_expr, Name Expr(AsColumn(dt, y_col)));
Insert Into(variables_expr, Name Expr(temp_expr));
);
gb_expr = Expr(Graph Builder(
Show Control Panel(0)
));
Insert Into(gb_expr, Name Expr(variables_expr));
For Each({y_col, idx}, y_values,
Eval(EvalExpr(
Insert Into(gb_expr,
Name Expr(Elements(Position(1, Expr(idx)), Points(X, Y, Legend(Expr(idx)))))
)
));
);
Show(Name Expr(gb_expr));
Eval(gb_expr);自動化とスクリプト作成ウィンドウズRe: グラフ ビルダーに Y 変数をリストとして指定した場合に、点に箱ひげ図を追加するにはどうすればよいですか?JMP で対話的にグラフを作成する

スクリプトをクリップボード/スクリプトウィンドウに取り込みます
Graph Builder(
Show Control Panel(0),
Variables(X(:height), Y(:name), Y(:age), Y(:sex), Y(:weight)),
Elements(Position(1, 1), Points(X, Y, Legend(1)), Box Plot(X, Y, Legend(5))),
Elements(Position(1, 2), Points(X, Y, Legend(2)), Box Plot(X, Y, Legend(6))),
Elements(Position(1, 3), Points(X, Y, Legend(3)), Box Plot(X, Y, Legend(7))),
Elements(Position(1, 4), Points(X, Y, Legend(4)), Box Plot(X, Y, Legend(8))),
SendToReport(
Dispatch(
{},
"400",
LegendBox,
{Legend Position(
{1, [0], 5, [4, -3], 2, [1], 6, [5, -3], 3, [2], 7, [6, -3], 4, [3],
8, [7, -3]}
)}
)
)
)
元のグラフビルダーが次のような場合、BoxPlots を含めるために何を変更する必要があるかを確認してください
Graph Builder(
Show Control Panel(0),
Variables(X(:height), Y(:name), Y(:age), Y(:sex), Y(:weight)),
Elements(Position(1, 1), Points(X, Y, Legend(1))),
Elements(Position(1, 2), Points(X, Y, Legend(2))),
Elements(Position(1, 3), Points(X, Y, Legend(3))),
Elements(Position(1, 4), Points(X, Y, Legend(4)))
)
スクリプトに戻って、小さな変更を試してください。 元のスクリプトに基づいて、Elements に何かが欠けていることがかなり簡単にわかります。
Name Expr(Elements(Position(1, Expr(idx)), Points(X, Y, Legend(Expr(idx)))))
そこに箱ひげ図を正しい形式で追加してみてください。
Re: グラフ ビルダーに Y 変数をリストとして指定した場合に、点に箱ひげ図を追加するにはどうすればよいですか?グラフを実行します。
コントロールパネルを開きます
必要な箱ひげ図を追加します。
コントロールパネルを閉じる
赤い三角形に移動して選択します
「保存」=>「スクリプトからスクリプト」ウィンドウ
コードを調べて、古いスクリプトにはない、新しいスクリプトにある追加項目を追加するようにスクリプトを変更します。
Re: グラフ ビルダーに Y 変数をリストとして指定した場合に、点に箱ひげ図を追加するにはどうすればよいですか?@txnelson私はまさにそれを実行し、箱ひげ図を対話的に追加し、結果のスクリプトを確認し、元のスクリプトに変更を加えましたが、まだ箱ひげ図を機能させることができませんでした。私はまだ何が足りないのか、何が必要なのかを見つけるのが苦手だと思います。
しようとします@jthi今すぐ提案。
Re: グラフ ビルダーに Y 変数をリストとして指定した場合に、点に箱ひげ図を追加するにはどうすればよいですか?JSL を実行し、グラフを希望どおりに変更して、新しいグラフから JSL を保存します。新しい JSL をこのディスカッション トラックに追加してください。確認してみます。
Re: グラフ ビルダーに Y 変数をリストとして指定した場合に、点に箱ひげ図を追加するにはどうすればよいですか?@txnelson以下は私の実際のケースに近いものです。
Names default To Here (1);
Clear Log ();
dt = Open("$sample_data\Semiconductor Capability.jmp");
y_values = {"NPN1", "IVP1", "PNP4", "NPN4"};
variables_expr = Expr(Variables(X(:lot_id)));
For Each({y_col}, y_values,
temp_expr = Expr(Y());
Insert Into(temp_expr, Name Expr(AsColumn(dt, y_col)));
Insert Into(variables_expr, Name Expr(temp_expr));
);
gb_expr = Expr(Graph Builder(
Show Control Panel(0)
));
Insert Into(gb_expr, Name Expr(variables_expr));
For Each({y_col, idx}, y_values,
Eval(EvalExpr(
Insert Into(gb_expr,
Name Expr(Elements(Position(1, Expr(idx)), Points(X, Y, Legend(Expr(idx)))))
)
));
);
Show(Name Expr(gb_expr));
Eval(gb_expr); それは与える

ただし、次のようなものを望みます

JMP で生成されたスクリプトは次のとおりです。
Graph Builder(
Show Control Panel( 0 ),
Variables( X( :lot_id ), Y( :NPN1 ), Y( :IVP1 ), Y( :PNP4 ), Y( :NPN4 ) ),
Elements(
Position( 1, 1 ),
Points( X, Y, Legend( 1 ), Jitter( "None" ) ),
Box Plot( X, Y, Legend( 5 ), Jitter( "None" ) )
),
Elements(
Position( 1, 2 ),
Points( X, Y, Legend( 2 ), Jitter( "None" ) ),
Box Plot( X, Y, Legend( 6 ), Jitter( "None" ) )
),
Elements(
Position( 1, 3 ),
Points( X, Y, Legend( 3 ), Jitter( "None" ) ),
Box Plot( X, Y, Legend( 7 ), Jitter( "None" ) )
),
Elements(
Position( 1, 4 ),
Points( X, Y, Legend( 4 ), Jitter( "None" ) ),
Box Plot( X, Y, Legend( 8 ), Jitter( "None" ) )
),
SendToReport(
Dispatch(
{},
"400",
LegendBox,
{Legend Position(
{1, [0], 5, [4, -3], 2, [1], 6, [5, -3], 3, [2], 7, [6, -3], 4, [3],
8, [7, -3]}
)}
)
)
);問題は、この投稿の一番上のスクリプトを変更して、点に加えて箱ひげ図を含める方法です。
Points () のすぐ下に Box Plots () を追加しても、両方が得られません。
箱ひげ図 () の配置が間違っているようです。 ここで助けが必要です。
Re: グラフ ビルダーに Y 変数をリストとして指定した場合に、点に箱ひげ図を追加するにはどうすればよいですか?デフォルトの「箱ひげ図」外れ値を使用したと思います。
すべての点を結ぶ「箱ひげ図」分位法をお探しですか?

Graph Builder(
Size( 1135, 705 ),
Show Control Panel( 0 ),
Variables(
X( :“S-b"n ),
Y( :C),
Color( :“S-b"n )
),
Elements( Box Plot( X, Y, Legend( 4 ), Box Type( "Quantile" ) ) )
);
Re: グラフ ビルダーに Y 変数をリストとして指定した場合に、点に箱ひげ図を追加するにはどうすればよいですか?希望のグラフを作成するには、非常に小さな変更が必要でした。
グラフ ビルダーを実行する最初のスクリプトによって生成される JSL は次のとおりです。
Graph Builder(
Show Control Panel( 0 ),
Variables( X( :lot_id ), Y( :NPN1 ), Y( :IVP1 ), Y( :PNP4 ), Y( :NPN4 ) ),
Elements( Position( 1, 1 ), Points( X, Y, Legend( 1 ) ) ),
Elements( Position( 1, 2 ), Points( X, Y, Legend( 2 ) ) ),
Elements( Position( 1, 3 ), Points( X, Y, Legend( 3 ) ) ),
Elements( Position( 1, 4 ), Points( X, Y, Legend( 4 ) ) )
);
上記のグラフ ビルダー コードを作成した JSL を見ると、実際の作業を行うのは 2 つのセクションだけです。
gb_expr = Expr(Graph Builder(
Show Control Panel(0)
));
グラフビルダーのシェルを作成します。
Graph Builder(
Show Control Panel( 0 ),
);
JSL
variables_expr = Expr(Variables(X(:lot_id)));
For Each({y_col}, y_values,
temp_expr = Expr(Y());
Insert Into(temp_expr, Name Expr(AsColumn(dt, y_col)));
Insert Into(variables_expr, Name Expr(temp_expr));
);
コードを生成します
Variables( X( :lot_id ), Y( :NPN1 ), Y( :IVP1 ), Y( :PNP4 ), Y( :NPN4 ) )
それから、
Insert Into(gb_expr, Name Expr(variables_expr));
Variables( X(.....) JSL を Graph Builder() コードに挿入します
Graph Builder(
Show Control Panel( 0 ),
Variables( X( :lot_id ), Y( :NPN1 ), Y( :IVP1 ), Y( :PNP4 ), Y( :NPN4 ) )
);
今しなければならないことは、構築することです
Elements( Position( 1, 1 ), Points( X, Y, Legend( 1 ) ) ),
Elements( Position( 1, 2 ), Points( X, Y, Legend( 2 ) ) ),
Elements( Position( 1, 3 ), Points( X, Y, Legend( 3 ) ) ),
Elements( Position( 1, 4 ), Points( X, Y, Legend( 4 ) ) )
これらのコード行を作成する JSL は次のとおりです。
For Each({y_col, idx}, y_values,
Eval(EvalExpr(
Insert Into(gb_expr,
Name Expr(Elements(Position(1, Expr(idx)), Points(X, Y, Legend(Expr(idx)))))
)
));
);
各 Y 値をループして Elements 行を 1 つずつ作成し、それを Graph Builder() JSL に挿入します。
ついに、
Eval(gb_expr);
完成したグラフビルダーJSLを実行します。
さて、今、何を変える必要があるのか。
基本的に、元のスクリプトが作成した JSL と、新しい変更を加えてグラフ ビルダーから保存した JSL の違いを見ると、元のスクリプト出力の要素構造は次のようになります。
Elements( Position( 1, 1 ), Points( X, Y, Legend( 1 ) ) )
保存されたコードの要素セクションには、点と箱ひげ図の両方のセクションがあります。
Elements(
Position( 1, 1 ),
Points( X, Y, Legend( 1 ), Jitter( "None" ) ),
Box Plot( X, Y, Legend( 5 ), Jitter( "None" ) )
)
したがって、変更する必要があるのは、Elements セクションを生成するコードにこの 2 番目のセクションを追加することだけです。
For Each( {y_col, idx}, y_values,
Eval(
Eval Expr(
Insert Into(
gb_expr,
Name Expr(
Elements(
Position( 1, Expr( idx ) ),
Points( X, Y, Legend( Expr( idx ) ), jitter( "None" ) ),
Box Plot( X, Y, Legend( Expr( N Items( y_values ) + idx ), jitter( "None" ) ) )
)
)
)
)
)
);
これらすべてをまとめると、新しいスクリプトは次のようになります。
Names Default To Here( 1 );
Clear Log();
dt = Open( "$sample_data\Semiconductor Capability.jmp" );
y_values = {"NPN1", "IVP1", "PNP4", "NPN4"};
variables_expr = Expr(
Variables( X( :lot_id ) )
);
For Each( {y_col}, y_values,
temp_expr = Expr( Y() );
Insert Into( temp_expr, Name Expr( As Column( dt, y_col ) ) );
Insert Into( variables_expr, Name Expr( temp_expr ) );
);
gb_expr = Expr(
Graph Builder( Show Control Panel( 0 ) )
);
Insert Into( gb_expr, Name Expr( variables_expr ) );
For Each( {y_col, idx}, y_values,
Eval(
Eval Expr(
Insert Into(
gb_expr,
Name Expr(
Elements(
Position( 1, Expr( idx ) ),
Points( X, Y, Legend( Expr( idx ) ), jitter( "None" ) ),
Box Plot( X, Y, Legend( Expr( N Items( y_values ) + idx ), jitter( "None" ) ) )
)
)
)
)
)
);
Show( Name Expr( gb_expr ) );
Eval( gb_expr );Re: グラフ ビルダーに Y 変数をリストとして指定した場合に、点に箱ひげ図を追加するにはどうすればよいですか?@txnelsonありがとう。
これは簡単には思いつきませんでした。
Box Plot( X, Y, Legend( Expr( N Items( y_values ) + idx ), jitter( "None" ) ) )
ポイントのデフォルトのマーカーを「+」または「四角」に変更するにはどうすればよいですか。 これではうまくいきません
Points( X, Y, Legend( Expr( idx ) ), jitter( "None" ), marker ("square") )変更するマーカー各 Y 変数に対して sendToReport () を介してマーカーの変更を指示する必要があることを対話的に示しています。 すべての Y 変数に対してこれを一度に行うにはどうすればよいでしょうか?
Re: グラフ ビルダーに Y 変数をリストとして指定した場合に、点に箱ひげ図を追加するにはどうすればよいですか?どこでやるのかによって、どこを見るかが変わってきます。 凡例から実行する場合の例を次に示します。
凡例から変更すると、次のようになります
{Legend Model(4, Properties(0, {Marker("Circle")}, Item ID("NPN4", 1)))}
そこで、Scripting Index から Legend Model を検索します。

そこからスクリプトを取得し、ニーズに合わせて変更しますが、できるだけシンプルにして (2 番目の Y 軸を追加して)、テストしてみます。
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), Y(:height), Y(:weight)),
Elements(Position(1, 1), Points(X, Y, Legend(3))),
Elements(Position(1, 2), Points(X, Y, Legend(1)))
);
server = gb << Get Legend Server;
item = server << Get Legend Item(1, 1);
item << Set Properties({Marker("Circle")});
1 つのプロット上のマーカーを変更することができました。 次に、すべてのプロットでそれらを変更するにはどうすればよいでしょうか? 次に、スクリプトをさらに詳しく調べてみると、いくつかのインデックスが提供されているようです。
item = server << Get Legend Item(1, 1);
<< スクリプト インデックスから凡例項目を取得し、それが存在することを望みます。存在しない場合は、他の凡例関連オブジェクトを調べて、同様の方法で機能することを望みます (または、単にサーバーにメッセージを送信してみてください。<< get Lege Ctrl+Space)ここ)。
server << Get Legend Items;
{{LegendModelItem(Label("height"), Type("Marker"))},
{LegendModelItem(Label("weight"), Type("Marker"))}}
これで凡例項目のリストが完成しました。 そのリストをループして何が起こるか見てみましょう
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), Y(:height), Y(:weight)),
Elements(Position(1, 1), Points(X, Y, Legend(3))),
Elements(Position(1, 2), Points(X, Y, Legend(1)))
);
server = gb << Get Legend Server;
For Each({item}, server << Get Legend Items,
item << Set Properties({Marker("Circle")});
);
それがうまくいく場合は、より簡単なオプションは、マーカーを行状態としてデータテーブルに設定することです。
Re: グラフ ビルダーに Y 変数をリストとして指定した場合に、点に箱ひげ図を追加するにはどうすればよいですか?@jthiありがとう。 後で凡例サーバーへのハンドルを取得して各 Y 変数のマーカーを変更するのではなく、ポイントが最初にプロットされるときにマーカーを変更する方法はありますか?
Re: グラフ ビルダーに Y 変数をリストとして指定した場合に、点に箱ひげ図を追加するにはどうすればよいですか?その後変更できなかった理由はありますか?
SendToReport を使用し、スクリプト内の他の部分が構築されているのと同様のアイデアで、Dispatch 部分内に Legend モデルを構築できます。
Re: グラフ ビルダーに Y 変数をリストとして指定した場合に、点に箱ひげ図を追加するにはどうすればよいですか?@jthi確かに、その後は状況が変わる可能性があります。 私にとっては、ポイントのプロット中にマーカーを変更する方が簡単な方法のように思えました。
Re: グラフ ビルダーに Y 変数をリストとして指定した場合に、点に箱ひげ図を追加するにはどうすればよいですか?@jthi @txnelson以下のメイン スクリプトでは、Eval() の下に Local Data Filter () を追加しました。これは意図したとおりに機能します。
Eval( gb_expr <<LOCAL data="https://community.jmp.com/" filter=""></LOCAL>
しかし、マーカーを更新するためのスクリプトを追加すると、チャートが 2 回プロットされます。
Eval(
server = gb_expr << Get Legend Server;
For Each( {item}, server << Get Legend Items, item << Set Properties( {Marker( "Circle" )} ) );
);<BR />
Names Default To Here( 1 );
Clear Log();
dt = Open( "$sample_data\Semiconductor Capability.jmp" );
y_values = {"NPN1", "IVP1", "PNP4", "NPN4"};
variables_expr = Expr(
Variables( X( :lot_id ) )
);
For Each( {y_col}, y_values,
temp_expr = Expr( Y() );
Insert Into( temp_expr, Name Expr( As Column( dt, y_col ) ) );
Insert Into( variables_expr, Name Expr( temp_expr ) );
);
gb_expr = Expr(
Graph Builder( Show Control Panel( 0 ) )
);
Insert Into( gb_expr, Name Expr( variables_expr ) );
For Each( {y_col, idx}, y_values,
Eval(
Eval Expr(
Insert Into(
gb_expr,
Name Expr(
Elements(
Position( 1, Expr( idx ) ),
Points( X, Y, Legend( Expr( idx ) ), jitter( "None" ) ),
Box Plot( X, Y, Legend( Expr( N Items( y_values ) + idx ), jitter( "None" ) ) )
)
)
)
)
)
);
//Show( Name Expr( gb_expr ) );
Eval( gb_expr <<LOCAL data="https://community.jmp.com/" filter=""></LOCAL>2 番目のチャートには更新されたマーカーが含まれています。
ローカル データ フィルターと一緒に更新されたマーカーを含む単一のグラフをプロットするにはどうすればよいですか?
おそらく、マーカー変更の最後のピースを、助けを求めた場所に正しく配置することができません。
Re: グラフ ビルダーに Y 変数をリストとして指定した場合に、点に箱ひげ図を追加するにはどうすればよいですか?gb_expr を 2 回実行する必要はありません。 gb_expr から取得した参照を取得し、それらのメッセージをそこに送信したいとします。
gb = Eval( gb_expr );
gb << Local data Filter(...)
server = gb << get legend server;