ソリューション me との組み合わせ@txnelsonポイント/スムーザーなどを変更できるはずです。 まず、JMP を使用してグラフを作成します (すべての列を y 軸に配置する必要はありません。使用できるのは 2 つだけです)。 このスクリプトを開発する方法を説明します (少し長くなります)。
1. JMP サンプル データを開きます。 この場合、私が知っているように、Semiconductor Capability.jmpには多くの列があります
2. グラフ ビルダーで、いくつかの列を X 軸、2 つの列を Y 軸としてグラフを作成します。

スクリプトを取る
Graph Builder(
Variables(X(:lot_id), Y(:NPN1), Y(:PNP1, Position(1))),
Elements(Points(X, Y(1), Y(2), Legend(3)))
)
3. ポイントを線に変更し、Summary Statistic もデフォルト値から変更します。スクリプトでどのように変更できるかを確認できます。

スクリプトを取る
Graph Builder(
Variables(X(:lot_id), Y(:NPN1), Y(:PNP1, Position(1))),
Elements(Line(X, Y(1), Y(2), Legend(4), Summary Statistic("Median")))
)
4. これで、作業を開始するための非常に優れたベースライン スクリプトができました。 私が知っているのでRe: 式を文字列に書かずにこれを構築できますか?この問題を解決するために使用できます。これをベースラインとして使用します (以前に提供したスクリプト)。
基本的なグラフを使用:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
x_col = Column(dt, 1);
y_cols = (dt << Get Column Names())[5::N Cols(dt)];
var_expr = EvalExpr(
Variables(X(Expr(x_col))
));
For Each({col}, y_cols,
y_expr = Expr(Y(Position(1)));
Insert Into(y_expr, NameExpr(col), 1);
Insert Into(var_expr, Name Expr(y_expr));
);
gb = Eval(Substitute(
Expr(
gb = dt << Graph Builder(
Size(838, 391),
Show Control Panel(0),
vvv,
)
),
Expr(vvv), Name Expr(var_expr),
));
gb_image = gb << get picture;
gb << Close Window;
New window("test",
gb_image
);
ここで、点の代わりに線が必要な場合は、JMP から以前に提供された「線」スクリプトで何を変更する必要があるかを確認します。 基本的には要素を追加する必要があります。
Elements(Line(X, Y(1), Y(2), Legend(4), Summary Statistic("Median")))
幸いなことに、これらは他の投稿に追加されています
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
x_col = Column(dt, 1);
y_cols = (dt << Get Column Names())[5::N Cols(dt)];
var_expr = EvalExpr(
Variables(X(Expr(x_col))
));
var_line = Expr(Line(X));
For Each({col, idx}, y_cols,
y_expr = Expr(Y(Position(1)));
Insert Into(y_expr, NameExpr(col), 1);
Insert Into(var_expr, Name Expr(y_expr));
yline_expr = Parse("Y("||char(idx)||")");
Insert Into(var_line, Name Expr(yline_expr));
);
gb = Eval(Substitute(
Expr(
gb = dt << Graph Builder(
Size(838, 391),
Show Control Panel(0),
vvv,
Elements(yyy)
)
),
Expr(vvv), Name Expr(var_expr),
Expr(yyy), Name Expr(var_line)
));
gb_image = gb << get picture;
gb << Close Window;
New window("test",
gb_image
);

(要約統計量は変更しませんでしたが、グラフ ビルダーを作成する前に var_line にもう少し式を挿入することで、かなり簡単に変更できるはずです)
yline_expr = Expr(Legend(6));<BR />Insert Into(var_line, Name Expr(yline_expr));<BR />yline_expr = Expr(Summary Statistic("Median"));<BR />Insert Into(var_line, Name Expr(yline_expr));<BR />
Expr、Substitute、NameExpr などの使用方法を知っているので、コミュニティのこれらの投稿を通じて学びました。 Eval Insert、Eval Expr、Parse、および Substitute を使用して、ある式を別の式に挿入します。 、式処理関数: パート I - Expr()、NameExpr()、Eval() などの解明 難問そして、たくさんの試行錯誤を繰り返しました(特に Name Expr については、いまだに混乱しています)。
そして最後に、このスクリプトをあなたが持っているスクリプトと組み合わせるとしたら (もっとクリーンアップし、式の順序を変更し、おそらく列セレクターを事前に入力し、使用するグラフの種類を選択するオプションを提供しますが、これはアイデア):
もっと見る...
Names Default To Here(1);
//the data table you want to operate on
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
//number of columns in the data table
numcol = N Col(dt);
selectorwindow = New Window("Column Selector",
<<MODAL></MODAL>
作成したインタラクティブなグラフ ビルダーを使用して JMP にグラフを作成する JSL を生成させるのではなく、Python プログラマーが行うように、JSL をゼロから生成しているように聞こえます。以下のグラフをインタラクティブに作成すると、

赤い三角形に移動して [スクリプト] を選択すると、両方の Y 軸変数を処理するスクリプトが生成されます
Graph Builder(
Size( 528, 448 ),
Show Control Panel( 0 ),
Variables( X( :age ), Y( :height ), Y( :weight, Position( 1 ) ) ),
Elements(
Points( X, Y( 1 ), Y( 2 ), Legend( 5 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 6 ) )
),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
5,
Base( 0, 0, 0, Item ID( "height", 1 ) ),
Base( 1, 0, 0, Item ID( "weight", 1 ) )
)}
)
)
);
ここで、上記のようなスクリプトを使用して、必要な数の Y 列を処理するためにスクリプトを拡張しようとすると、もう少し作業が必要になる場合があります。
これはグラフの同じ構造ですが、より多くの Y 列があります

これは、グラフを再作成するために JMP が作成した拡張 JSL です。
Graph Builder(
Size( 528, 458 ),
Show Control Panel( 0 ),
Variables(
X( :Wafer ID in lot ID ),
Y( :NPN1 ),
Y( :PNP1, Position( 1 ) ),
Y( :PNP2, Position( 1 ) ),
Y( :NPN2, Position( 1 ) ),
Y( :PNP3, Position( 1 ) ),
Y( :IVP1, Position( 1 ) ),
Y( :PNP4, Position( 1 ) )
),
Elements(
Points(
X,
Y( 1 ),
Y( 2 ),
Y( 3 ),
Y( 4 ),
Y( 5 ),
Y( 6 ),
Y( 7 ),
Legend( 3 )
),
Smoother(
X,
Y( 1 ),
Y( 2 ),
Y( 3 ),
Y( 4 ),
Y( 5 ),
Y( 6 ),
Y( 7 ),
Legend( 4 )
)
),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
3,
Base( 0, 0, 0, Item ID( "NPN1", 1 ) ),
Base( 1, 0, 0, Item ID( "PNP1", 1 ) ),
Base( 2, 0, 0, Item ID( "PNP2", 1 ) ),
Base( 3, 0, 0, Item ID( "NPN2", 1 ) ),
Base( 4, 0, 0, Item ID( "PNP3", 1 ) ),
Base( 5, 0, 0, Item ID( "IVP1", 1 ) ),
Base( 6, 0, 0, Item ID( "PNP4", 1 ) )
)}
)
)
);
Graph Builder(
Size( 528, 458 ),
Show Control Panel( 0 ),
Variables(
X( :Wafer ID in lot ID ),
Y( :NPN1 ),
Y( :PNP1, Position( 1 ) ),
Y( :PNP2, Position( 1 ) ),
Y( :NPN2, Position( 1 ) ),
Y( :PNP3, Position( 1 ) ),
Y( :IVP1, Position( 1 ) ),
Y( :PNP4, Position( 1 ) )
),
Elements(
Points(
X,
Y( 1 ),
Y( 2 ),
Y( 3 ),
Y( 4 ),
Y( 5 ),
Y( 6 ),
Y( 7 ),
Legend( 3 )
),
Smoother(
X,
Y( 1 ),
Y( 2 ),
Y( 3 ),
Y( 4 ),
Y( 5 ),
Y( 6 ),
Y( 7 ),
Legend( 4 )
)
),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
3,
Base( 0, 0, 0, Item ID( "NPN1", 1 ) ),
Base( 1, 0, 0, Item ID( "PNP1", 1 ) ),
Base( 2, 0, 0, Item ID( "PNP2", 1 ) ),
Base( 3, 0, 0, Item ID( "NPN2", 1 ) ),
Base( 4, 0, 0, Item ID( "PNP3", 1 ) ),
Base( 5, 0, 0, Item ID( "IVP1", 1 ) ),
Base( 6, 0, 0, Item ID( "PNP4", 1 ) )
)}
)
)
);
ここで、JSL プログラマーは、実行するコマンド文字列を作成してグラフ ビルダーに渡す必要があります。すでにこれを行っていて、グラフの最初の Y 変数しか取得していない場合、通常、グラフ ビルダーは渡された情報を評価できません。使用している JSL を提供すると、通常、コミュニティは非常に役立ちます。
このトピックは役に立つかもしれません:
Re: 式を文字列に書かずにこれを構築できますか?
ここには多くの式があり、 << Get picture を使用してグラフビルダーから「機能を削除」することもできます
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
x_col = Column(dt, 1);
y_cols = (dt << Get Column Names())[5::N Cols(dt)];
var_expr = EvalExpr(
Variables(X(Expr(x_col))
));
For Each({col}, y_cols,
y_expr = Expr(Y(Position(1)));
Insert Into(y_expr, NameExpr(col), 1);
Insert Into(var_expr, Name Expr(y_expr));
);
gb = Eval(Substitute(
Expr(
gb = dt << Graph Builder(
Size(838, 391),
Show Control Panel(0),
vvv,
)
),
Expr(vvv), Name Expr(var_expr),
));
gb_image = gb << get picture;
gb << Close Window;
New window("test",
gb_image
);