動的に生成された積み上げチャートへのディスパッチこんにちは、みんな、
中央値と標準偏差の「パラメーター」ごとに 2 つのグラフがあるレポートを生成しようとしていますが、行を追加するのに苦労しています。
「Summary.jmp」ファイルには、「ロット」(私はそれを X 軸として使用します) を持つ複数の列と、いくつかのパラメーターが含まれています。それぞれの列には、接尾辞「_Q50」が付いた中央値の列と、接尾辞「_StdDev」が付いた列があります。 .
Target、LowerSpecsLimit、UpperSpecsLimits (TGT、LSL、USL) を追加したパラメーターのリストがあります。 選択した「ロット」セットに基づいて変更される可能性があるため、それらを列に直接配置しません。スクリプトが失敗した場合に混乱を残さないようにするために、実際にはファイルにまったく触れないことをお勧めします理由はともかく。
タイトルと軸ラベルを置き換える Dispatch もあります。
次に、中央値チャートと標準偏差チャートを重ねて生成する関数があります。チャートは問題ありません。
しかし、ディスパッチセクションに何を入れても、エラーが発生します
「ScaleBox が見つかりません ... {} に」
そして、すべての TextEditor ディスパッチは何もしていないようです (エラーでさえありませんが、関数は最初のディスパッチ エラーで停止すると思いますか?)
チャートを生成し、結果のスクリプトを確認するために手動で変更しましたが、役に立ちませんでした。 「Param1_Q50」を直接使用していますが、スクリプトに戻すと機能しません!
コードは次のとおりです。
NamesDefaultToHere(1);
Open("Summary.jmp");
GraphXSize = 800;
GraphYSize = 600;
ParamsList = {
{"Param1", "Name1", 0, -10, 10},
{"Param2", "Name2", 50, 25, 75}
};
ParamGraph = Function (
{parameter, title, tgt=".", lsl=".", usl="."},
LOCAL(
{Default Local},
medianCol = parameter || "_Q50";
stdevCol = parameter || "_StdDev";
gb = Graph Builder(
Size(GraphXSize,GraphYSize),
Show Control Panel(0),
Show Footer(0),
Show Legend(0),
Variables(
X(:Name("Lot")),
Y(Column(medianCol)),
Y(Column(stdevCol)),
Color(:Lot)
),
Elements(
Points(X, Y, Legend(6))
),
SendToReport(
Dispatch(
{},
medianCol,
ScaleBox,
{IF(tgt != ".", Add Ref Line(tgt, "Solid", "Black", "TARGET", 1)),
IF(lsl != ".", Add Ref Line(lsl, "Solid", "Purple", "LSL", 1)),
IF(usl != ".", Add Ref Line(usl, "Solid", "Red", "USL", 1))}
),
Dispatch({}, "graph title", TextEditor, {Set Text(title)}),
Dispatch({}, "Y title", TextEditor, {Set Text("Median")}),
Dispatch({}, "Y 1 title", TextEditor, {Set Text("Std Dev")})
),
);
);
);
New Window("Summary - Report",
For(i=1, i<=Length(ParamsList), i++,
ParamGraph(ParamsList[i][1], ParamsList[i][2], ParamsList[i][3], ParamsList[i][4], ParamsList[i][5])
)
) << Set Window Icon("Trellis")
Dispatch セクションの medianCol を「Param1_Q50」に置き換えようとしましたが、それが置換の問題であるかどうかを確認するために、最初のグラフが他のグラフではなく線を取得することを期待していましたが、うまくいきませんでした!
レポートも参考にしてみました
rgb = gb << report;
rgb[TextEditBox(5)] << Set Text("Median");
しかし、私は再びエラーメッセージを受け取ります:
Cannot subscript Display Box in access or evaluation of 'Subscript' , rgb[/*###*/"TextEditor"]
これらのチャートの要素に対処する方法を知っている人はいますか??
前もって感謝します!!
Re: 動的に生成された積み上げチャートへのディスパッチ
Re: 動的に生成された積み上げチャートへのディスパッチこんにちはジム、
確かに、それはうまくいきます!
あなたの変更を手動でコピーしましたが、2 つの間違いを犯しました。
1.「要素」行が必須であることを認識していませんでした
2. タイトルの代わりに「Parse(タイトル)」と書きます
そして、私はあなたのソリューションをはるかに好みます(よりクリーンなコードと「残余」なし)。
どうもありがとう!
Re: 動的に生成された積み上げチャートへのディスパッチJMP 12.2でサマリーテーブルを使用してスクリプトを実行しましたが、エラーなしで実行されました。 以下は、あなたの要約表を含むスクリプトと、私が書き直したスクリプトです。
Names Default To Here( 1 );
//Open("Summary.jmp");
dtsumm = New Table( "Summary",
Add Rows( 6 ),
New Column( "Lot",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1, 2, 3, 4, 5, 6] )
),
New Column( "Param1_Q50",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [-3, 7, 8, -12, 5, 0] )
),
New Column( "Param1_StdDev",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [0.2, 1, 0.6, 2, 0.2, 0.3] )
),
New Column( "Param2_Q50",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [23, 18, 54, 62, 78, 45] )
),
New Column( "Param2_StdDev",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [0.9, 1.2, 7, 3.6, 4.2, 1] )
)
);
// Run the script
GraphXSize = 800;
GraphYSize = 600;
ParamsList = {{"Param1", "Name1", 0, -10, 10},
{"Param2", "Name2", 50, 25, 75}};
ParamGraph = Function( {parameter, title, tgt = ., lsl = ., usl = .},
Local( {Default Local},
medianCol = parameter || "_Q50";
stdevCol = parameter || "_StdDev";
Eval(
Substitute(
Expr(
gb = dtSumm << Graph Builder(
Size( __GraphXSize__, __GraphYSize__ ),
Show Control Panel( 0 ),
Show Legend( 0 ),
Show Footer( 0 ),
Variables( X( :lot ), Y( __Q50__ ), Y( __Std__ ), Color( :lot ) ),
Elements( Position( 1, 1 ), Points( X, Y, Legend( 6 ) ) ),
Elements( Position( 1, 2 ), Points( X, Y, Legend( 7 ) ) ),
SendToReport(
Dispatch( {}, "graph title", TextEditBox, {Set Text( __title__ )} ),
Dispatch( {}, "Y title", TextEditBox, {Set Text( "Median" )} ),
Dispatch( {}, "Y 1 title", TextEditBox, {Set Text( "Std Dev" )} )
)
)
),
Expr( __GraphXSize__ ), GraphXSize,
Expr( __GraphYSize__ ), GraphYSize,
Expr( __Q50__ ), Parse( MedianCol ),
Expr( __Std__ ), Parse( stdevCol ),
Expr( __Title__ ), title
)
);
If( Is Missing( tgt ) == 0,
report(gb)[AxisBox( 3 )] << Add Ref Line( tgt, "Solid", Black, "TARGET", 1 )
);
If( Is Missing( lsl ) == 0,
report(gb)[AxisBox( 3 )] << Add Ref Line( lsl, "Solid", Purple, "LSL", 1 )
);
If( Is Missing( usl ) == 0,
report(gb)[AxisBox( 3 )] << Add Ref Line( usl, "Solid", Red, "USL", 1 )
);
)
);
New Window( "Summary - Report",
For( i = 1, i <= Length( ParamsList ), i++,
ParamGraph( ParamsList[i][1], ParamsList[i][2], ParamsList[i][3], ParamsList[i][4], ParamsList[i][5] )
)
) << Set Window Icon( "Trellis" );Re: 動的に生成された積み上げチャートへのディスパッチこんにちはジム、
ref summary.jmp ファイルで試してみたところ...
Cannot find TextEditBox[ "graph title" ] at {}
Cannot find TextEditBox[ "Y title" ] at {}
Cannot find TextEditBox[ "Y 1 title" ] at {}
Cannot subscript Display Box in access or evaluation of 'Subscript' , Report( gb )[/*###*/AxisBox( 3 )]
したがって、これがバグである場合は、私は JMP 12.1.0 64 ビットを使用していることを言及する必要があります。
とにかく、それは私の(汚れた)コードで動作するので、対処します。 閉じる必要があるツリー構造のウィンドウが大量にあるだけです...
Re: 動的に生成された積み上げチャートへのディスパッチこの例は、あなたが望むものを処理するためのより簡単な方法であることがわかると思います
最終的な形式が正確かどうかはわかりませんが、ニーズに合わせて簡単に変更できると思います
Names Default To Here( 1 );
//Open("Summary.jmp");
// Create a Sample data table
dt = Open( "$SAMPLE_DATA\semiconductor capability.jmp" );
dt:npn1 << delete property( "spec limits" );
dt:pnp1 << delete property( "spec limits" );
dt:npn1 << set name( "Param1" );
dt:pnp1 << set name( "Param2" );
dt:lot_id << set name( "lot" );
dtSumm = dt << Summary(
Group( :lot ),
Median( :Param1 ),
Std Dev( :Param1 ),
Median( :Param2 ),
Std Dev( :Param2 ),
Freq( "None" ),
Weight( "None" ),
statistics column name format( "column stat" )
);
dtSumm:Param1 Median << set name( "Param1_Q50" );
dtSumm:Param2 Median << set name( "Param2_Q50" );
dtSumm:Param1 Std Dev << set name( "Param1_StdDev" );
dtSumm:Param2 Std Dev << set name( "Param2_StdDev" );
// Run the script
GraphXSize = 800;
GraphYSize = 600;
ParamsList = {{"Param1", "Name1", 0, -10, 10},
{"Param2", "Name2", 50, 25, 75}};
ParamGraph = Function( {parameter, title, tgt = ., lsl = ., usl = .},
Local( {Default Local},
medianCol = parameter || "_Q50";
stdevCol = parameter || "_StdDev";
Eval(
Substitute(
Expr(
gb = dtSumm << Graph Builder(
Size( __GraphXSize__, __GraphYSize__ ),
Show Control Panel( 0 ),
Show Legend( 0 ),
Show Footer( 0 ),
Variables( X( :lot ), Y( __Q50__ ), Y( __Std__ ), Color( :lot ) ),
Elements( Position( 1, 1 ), Points( X, Y, Legend( 6 ) ) ),
Elements( Position( 1, 2 ), Points( X, Y, Legend( 7 ) ) ),
SendToReport(
Dispatch( {}, "graph title", TextEditBox, {Set Text( __title__ )} ),
Dispatch( {}, "Y title", TextEditBox, {Set Text( "Median" )} ),
Dispatch( {}, "Y 1 title", TextEditBox, {Set Text( "Std Dev" )} )
)
)
),
Expr( __GraphXSize__ ), GraphXSize,
Expr( __GraphYSize__ ), GraphYSize,
Expr( __Q50__ ), Parse( MedianCol ),
Expr( __Std__ ), Parse( stdevCol ),
Expr( __Title__ ), title
)
);
If( Is Missing( tgt ) == 0,
report(gb)[AxisBox( 3 )] << Add Ref Line( tgt, "Solid", Black, "TARGET", 1 )
);
If( Is Missing( lsl ) == 0,
report(gb)[AxisBox( 3 )] << Add Ref Line( lsl, "Solid", Purple, "LSL", 1 )
);
If( Is Missing( usl ) == 0,
report(gb)[AxisBox( 3 )] << Add Ref Line( usl, "Solid", Red, "USL", 1 )
);
)
);
New Window( "Summary - Report",
For( i = 1, i <= Length( ParamsList ), i++,
ParamGraph( ParamsList[i][1], ParamsList[i][2], ParamsList[i][3], ParamsList[i][4], ParamsList[i][5] )
)
) << Set Window Icon( "Trellis" );
Re: 動的に生成された積み上げチャートへのディスパッチ何度も試して失敗した後、なんとかそれを行うことができました (あまり直感的ではありません!)。
そのため、SendToReport は使用しませんでしたが、添え字を使用しました。
関数内にある場合、機能しません。 私はそれを取り出さなければなりませんでした:
NamesDefaultToHere(1);
Open("Summary.jmp");
GraphXSize = 800;
GraphYSize = 600;
ParamsList = {
{"Param1", "Name1", 0, -10, 10},
{"Param2", "Name2", 50, 25, 75}
};
ParamGraph = Function (
{parameter, title, tgt=., lsl=., usl=.},
LOCAL(
{Default Local},
medianCol = parameter || "_Q50";
stdevCol = parameter || "_StdDev";
return = Graph Builder(
Size(GraphXSize,GraphYSize),
Show Control Panel(0),
Show Footer(0),
Show Legend(0),
Variables(
X(:Name("Lot")),
Y(Column(medianCol)),
Y(Column(stdevCol)),
Color(:Lot)
),
Elements(
Points(X, Y, Legend(6))
)
);
);
);
wind = New Window("Summary - Report",
For(i=1, i<=Length(ParamsList), i++,
gb= ParamGraph(ParamsList[i][1], ParamsList[i][2], ParamsList[i][3], ParamsList[i][4], ParamsList[i][5]);
rgb = gb << report;
rgb << showtreestructure;
IF(
IsMissing(ParamsList[i][3]) == 0,
rgb[PictureBox(1), GraphBuilderBox(1), GraphBuilderAxisBox(2)] << Add Ref Line(ParamsList[i][3], "Solid", "Black", "TARGET", 1);
);
IF(
IsMissing(ParamsList[i][4]) == 0,
rgb[PictureBox(1), GraphBuilderBox(1), GraphBuilderAxisBox(2)] << Add Ref Line(ParamsList[i][4], "Solid", "Purple", "LSL", 1);
);
IF(
IsMissing(ParamsList[i][5]) == 0,
rgb[PictureBox(1), GraphBuilderBox(1), GraphBuilderAxisBox(2)] << Add Ref Line(ParamsList[i][5], "Solid", "Red", "USL", 1);
);
rgb[PictureBox(1), GraphBuilderBox(1), GraphBuilderTitleBox(1)] << Set Text(ParamsList[i][2]);
rgb[PictureBox(1), GraphBuilderBox(1), GraphBuilderTitleBox(3)] << Set Text ("Median");
rgb[PictureBox(1), GraphBuilderBox(1), GraphBuilderTitleBox(4)] << Set Text ("Standard Deviation");
)
) << Set Window Icon("Trellis");
次の行にも注意してください。
rgb << showtreestructure;
私がそれを持っていない場合、それは機能しません!
後で自動的に閉じる方法がわからないので、それは非常に面倒ですが、少なくとも、今は機能しています!
Re: 動的に生成された積み上げチャートへのディスパッチこんにちはジム、
ありがとう! 修正を行いましたが、問題は解決しませんでした。
{} に ScaleBox["medianCol"] が見つかりません
または私がそれをハードコーディングした場合」:
{} に ScaleBox["Param1_Q50"] が見つかりません
2 番目の Y 軸グラフを削除すると、突然参照線が機能しますが、タイトルと軸の名前が変更されないことに注意してください。
Re: 動的に生成された積み上げチャートへのディスパッチありがとう - ジムがカバーしてくれたようです
Re: 動的に生成された積み上げチャートへのディスパッチこんにちは。
これがsummary.jmpです。
Re: 動的に生成された積み上げチャートへのディスパッチ制限のデータ型が一致していません。 「Add Ref Line」では、行の値 (最初の値) が数値である必要があります。 関数では、文字列に設定しています。
ParamGraph = Function( {parameter, title, tgt = ".", lsl = ".", usl = "."}
そしてあなたのIfステートメントで
If( tgt != ".",
要素リストを数値に変更する必要があります
ParamGraph = Function( {parameter, title, tgt = ".", lsl = ., usl = .}
If ステートメントを次のように変更する必要があります。
If( IsMissing(tgt) == 0,
Re: 動的に生成された積み上げチャートへのディスパッチ私たちが実行できるコードを提供していただけると、より簡単にお手伝いできます。 つまり、テーブル「summary.jmp」を提供するか、コードを書き直して、JMP に付属するサンプル データ テーブルの 1 つを操作する必要があります。