JSL を使用してグラフの要素ステートメントを動的に追加する方法皆さん、こんにちは。JMPとJSLはまだ初心者ですが、コーディングには慣れています。パラメータ名のリスト(「PlotVars」配列で定義)を受け取り、それらをすべて同じグラフ上に別々のプロットで表示するJSLスクリプトを作成しようとしています。このスクリプトは、配列に定義されているパラメータの数に関係なく動作するようにしたいです(パラメータを増減させたい場合)。以下のコードを使ってスクリプトでこのスクリプトを作成することはできますが、すべてのプロットはデフォルトで点を使用して表示されるため、線で表示するようにしたいです。私の理解では、各位置に複数の要素ステートメントを使用するということです。問題は2行目の「var_line」変数の初期化にあると思います。Expr()で初期化すると、要素ステートメントは生成されますが、正しく実行されません。Parse()で初期化しても同じです。何か解決策があれば教えてください。JMP 18を使用しています。
編集 (jthi): jsl フォーマットを追加しました
var_expr = Expr(
Variables(X(As Column("Start Alignment of " || DataSet_1)))
);
var_line = Expr();//Unable to dymanically add elements to the graph. still unsure why
For(i = 1, i <= N Items(PlotVars), i++,
Insert Into(var_expr, Eval Expr(Y(As Column(PlotVars[Expr(i)] || " of " || DataSet_1), )));
Insert Into(
var_expr,
Eval Expr(Y(As Column(PlotVars[Expr(i)] || " of " || DataSet_2), Position(Expr(i)), ))
);
Insert Into(
var_line,
Eval Expr(Elements(Position(1, Expr(i)), Line(X, Y(1), Y(2)), Legend(4)))
);
);
plot = Substitute(
Expr(
Data Table("Comparison of" || DataSet_1 || "with" || DataSet_2) <<
Graph Builder(Size(809, 629), Show Control Panel(0), vvv, yyy)
),
Expr(vvv), Name Expr(var_expr),
Expr(yyy), Name Expr(test)
);
Eval(plot);
<
var_expr = Expr(Variables(X( as column("Start Alignment of " || DataSet_1) )));
var_line = Expr();//グラフに要素を動的に追加できません。理由は不明です。
for(i=1, i<=N 項目(プロット変数),i++,
var_expr に挿入し、Expr(Y( を column(PlotVars[expr(i)] || " of " || DataSet_1),))); を評価
var_expr に挿入し、Expr(Y( を column(PlotVars[expr(i)] || " of " || DataSet_2)、Position(expr(i)),))); を評価
挿入Into(var_line, Eval Expr(Elements(Position(1,expr(i)),Line(X,Y(1),Y(2)),Legend(4))));
);
プロット = 置換(
式(
データテーブル (「DataSet_1 と」||DataSet_2 の比較) <<
グラフビルダー(
サイズ(809,629)
コントロールパネルを表示(0)
観光案内所、
ええ
))、
Expr(vvv)、名前 Expr(var_expr)、
Expr(yyy), 名前 Expr(テスト)
);
評価(プロット);
>
自動化とスクリプトRe: JSL を使用してグラフの要素ステートメントを動的に追加する方法グラフをどのように見せたいですか?JMPで作成したスクリプトはどのように見えますか?JSLで作成したスクリプトと比べてどうですか?
Data Table("Comparison of" || DataSet_1 || "with" || DataSet_2) <<
Graph Builder(
Size(809, 629),
Show Control Panel(0),
Variables(
X(As Column("Start Alignment of " || DataSet_1)),
Y(As Column(PlotVars[1] || " of " || DataSet_1)),
Y(As Column(PlotVars[1] || " of " || DataSet_2), Position(1)),
Y(As Column(PlotVars[2] || " of " || DataSet_1)),
Y(As Column(PlotVars[2] || " of " || DataSet_2), Position(2))
),
test
)
グラフビルダーの動的構築に関する資料も豊富にあります。Scripters Clubの録画「グラフビルダーのJSL」 、 Reply All「グラフビルダーの動的コンテンツのスクリプト作成方法」などをご覧ください。
Re: JSL を使用してグラフの要素ステートメントを動的に追加する方法スクリプトは、要素ステートメントで points/smoother を使用してグラフを作成する点を除けば、まさに私が望んでいた通りのグラフを作成します(スクリプトの長さを短くするために変数は削除されていることに注意してください)。以下は、スクリプト出力から取得したグラフコードです。
Graph Builder(
Size( 809, 629 ),
Show Control Panel( 0 ),
Variables(
...
)
),
Elements(
Position( 1, 1 ),
Points( X, Y( 1 ), Y( 2 ), Legend( 1 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 2 ) )
),
Elements(
Position( 1, 2 ),
Points( X, Y( 1 ), Y( 2 ), Legend( 3 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 4 ) )
),
Elements(
Position( 1, 3 ),
Points( X, Y( 1 ), Y( 2 ), Legend( 5 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 6 ) )
),
Elements(
Position( 1, 4 ),
Points( X, Y( 1 ), Y( 2 ), Legend( 7 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 8 ) )
),
Elements(
Position( 1, 5 ),
Points( X, Y( 1 ), Y( 2 ), Legend( 9 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 10 ) )
)
);
代わりに Lines を使用することをお勧めします。
Graph Builder(
Size( 696, 590 ),
Show Control Panel( 0 ),
Variables(
...
)
),
Elements( Position( 1, 1 ), Line( X, Y( 1 ), Y( 2 ), Legend( 11 ) ) ),
Elements( Position( 1, 2 ), Line( X, Y( 1 ), Y( 2 ), Legend( 12 ) ) ),
Elements( Position( 1, 3 ), Line( X, Y( 1 ), Y( 2 ), Legend( 13 ) ) ),
Elements( Position( 1, 4 ), Line( X, Y( 1 ), Y( 2 ), Legend( 14 ) ) ),
Elements( Position( 1, 5 ), Line( X, Y( 1 ), Y( 2 ), Legend( 15 ) ) )
);
elements ステートメントに「挿入」しようとすると、個別の elements ステートメントではなく、ネストされた elements ステートメントが追加されるだけです。そして、グラフビルダーはこれらのネストされた elements ステートメントを無視しているようです。
Re: JSL を使用してグラフの要素ステートメントを動的に追加する方法
もっと見る...
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
plotvars = {"NPN1", "NPN2", "NPN3", "NPN4", "PNP1"};
xcol = "wafer";
gb_expr = Expr(Graph Builder(Size(809, 629), Show Control Panel(0)));
var_expr = EvalExpr(Variables(X(Expr(NameExpr(As Column(dt, xcol))))));
For Each({colname, idx}, plotvars,
Insert Into(var_expr, Eval Expr(Y(Expr(NameExpr(As Column(dt, colname))))));
);
Insert Into(gb_expr, Name Expr(var_expr));
For(idx = 1, idx <= N Items(plotvars), idx++,
elem_expr = Substitute(
Expr(Elements(Position(1, _pos_), Line(X, Y, Legend(_lgnd_)))),
Expr(_pos_), idx,
Expr(_lgnd_), idx
);
Insert Into(gb_expr, Name Expr(elem_expr));
);
// Show(gb_expr);
gb = Eval(EvalExpr((Send(dt, Expr(gb_expr)))));
gb_expr = Graph Builder(
Size(809, 629),
Show Control Panel(0),
Variables(X(:wafer), Y(:NPN1), Y(:NPN2), Y(:NPN3), Y(:NPN4), Y(:PNP1)),
Elements(Position(1, 1), Line(X, Y, Legend(1))),
Elements(Position(1, 2), Line(X, Y, Legend(2))),
Elements(Position(1, 3), Line(X, Y, Legend(3))),
Elements(Position(1, 4), Line(X, Y, Legend(4))),
Elements(Position(1, 5), Line(X, Y, Legend(5)))
);
Re: JSL を使用してグラフの要素ステートメントを動的に追加する方法このアイデアはうまくいきました。グラフビルダーレベルで要素コマンドを挿入するだけでよく、要素コマンドを単独で式に組み込む必要はありませんでした。