変動チャートでデータカテゴリ別に仕様限界を定義する方法こんにちは、
以下の例のように、変動チャートでデータ カテゴリ別に仕様限界 (赤い線) を描くにはどうすればよいでしょうか。赤い線は pptx で手動で描画されました。
参考までに jmp ファイル データを添付します。ご返信ありがとうございます。

自動化とスクリプト基本的なデータ分析とモデリングウィンドウズRe: 変動チャートでデータ カテゴリ別に仕様限界を定義する方法変動チャートでデータ カテゴリ別に仕様制限を変えると、何かヒントが得られますか?
Re: 変動チャートでデータ カテゴリ別に仕様限界を定義する方法こんにちは、jthiさん。
確認して手順に従いましたが、添付ファイルとスクリプトを直接使用してもまだ機能しませんでした。
Re: 変動チャートでデータ カテゴリ別に仕様限界を定義する方法あなたのデータを使用して(+制限を追加して)、そのスレッドのスクリプトに小さな修正を加えます

Re: 変動チャートでデータ カテゴリ別に仕様限界を定義する方法こんにちは、jthiさん。
確かに私が望んでいたチャートを描いてくれましたが、スクリプトをどのように修正すればよいのかまだわかりません。とにかく、返信ありがとうございます
Re: 変動チャートでデータ カテゴリ別に仕様限界を定義する方法Names Default To Here(1);
dt1 = Open("$DOWNLOADS/sample data.jmp");
dt = dt1 << Stack( // stack to get proper data format
columns(:A10, :A20, :A30),
Source Label Column("SampleGroup"),
Output Table("Stack")
);
// Add limits as they were not provided
dt << New Column("LSL", Numeric, Continuous, Values([10, 10, 10, 10, 10, 10, 10, 10, 10, 20, 20, 20, 20, 20, 20, 20, 20, 20]));
dt << New Column("Target", Numeric, Continuous, Values([20, 20, 20, 20, 20, 20, 20, 20, 20, 40, 40, 40, 40, 40, 40, 40, 40, 40]));
dt << New Column("USL", Numeric, Continuous, Values([30, 30, 30, 30, 30, 30, 30, 30, 30, 50, 50, 50, 50, 50, 50, 50, 50, 50]));
var = dt << Variability Chart(Y(:Data), X(:Phase, :SampleGroup));
dt_summary = dt << Summary(
Group(:Phase),
Max(:LSL),
Mean(:Target),
Min(:USL),
N Categories(:SampleGroup),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0)
);
dt_summary << Delete Columns("N Rows");
// We need access to the framebox
fb = Report(var)[Outline Box("Variability Chart for Data"), Frame Box(1)];
//Get phases count (this was missing)
Summarize(dt, phases = By(:Phase));
// Using graphic scripts most likely easiest option
xidx = 0;
For(i = 1, i <= N Items(phases), i++,
curphase = dt_summary[i, "Phase"];
curlsl = dt_summary[i, "LSL"];
curusl = dt_summary[i, "USL"];
curtarget = dt_summary[i, "Target"];
curcount = dt_summary[i, "SampleGroup"];
xend = xidx + curcount;
lslstart = Eval List({xidx, curlsl});
lslend = Eval List({xend, curlsl});
uslstart = Eval List({xidx, curusl});
uslend = Eval List({xend, curusl});
targetstart = Eval List({xidx, curtarget});
targetend = Eval List({xend, curtarget});
xidx = xend;
Eval(EvalExpr(
fb << Add Graphics Script(
Pen Color("Red");
Pen Size(1);
Line(Expr(lslstart), Expr(lslend)); // {x1, y1}, {x2, y2}
Line(Expr(uslstart), Expr(uslend)); // {x1, y1}, {x2, y2}
Pen Color("Blue");
Line(Expr(targetstart), Expr(targetend)); // {x1, y1}, {x2, y2}
);
));
);
fb << Y Axis(Max(1.1*Max(Col Max(Column(dt, "Data")), Col Max(Column(dt_summary, "USL"))))); // adjust yaxisRe: 変動チャートでデータ カテゴリ別に仕様限界を定義する方法やあ、
スクリプトをありがとうございます。正常に動作しました。
以下の制限設定に関して、最大 100 個のデータがあり、専用の「フェーズ」にのみ制限線を追加する場合、次のスクリプトを最適化するための解決策はありますか? よろしくお願いします
// Add limits as they were not provided
dt << New Column("LSL", Numeric, Continuous, Values([10, 10, 10, 10, 10, 10, 10, 10, 10, 20, 20, 20, 20, 20, 20, 20, 20, 20]));
dt << New Column("Target", Numeric, Continuous, Values([20, 20, 20, 20, 20, 20, 20, 20, 20, 40, 40, 40, 40, 40, 40, 40, 40, 40]));
dt << New Column("USL", Numeric, Continuous, Values([30, 30, 30, 30, 30, 30, 30, 30, 30, 50, 50, 50, 50, 50, 50, 50, 50, 50]));Re: 変動チャートでデータ カテゴリ別に仕様限界を定義する方法仕様制限テーブルを作成するか、パラメータが多すぎない場合は連想配列を作成することができます。
Names Default To Here(1);
dt1 = Open("$DOWNLOADS/sample data.jmp");
dt = dt1 << Stack( // stack to get proper data format
columns(:A10, :A20, :A30),
Source Label Column("SampleGroup"),
Output Table("Stack")
);
aa_specs = [
"L1" => ["LSL" => 10, "USL" => 30, "Target" => 20],
"L2" => ["LSL" => 30, "USL" => 50, "Target" => 40]
];
// Add limits as they were not provided
dt << New Column("LSL", Numeric, Continuous);
dt << New Column("Target", Numeric, Continuous);
dt << New Column("USL", Numeric, Continuous);
For Each Row(dt,
:LSL = aa_specs[:Phase]["LSL"];
:USL = aa_specs[:Phase]["USL"];
:Target = aa_specs[:Phase]["Target"];
);
またはスペック表を使用する
Names Default To Here(1);
dt1 = Open("$DOWNLOADS/sample data.jmp");
dt = dt1 << Stack( // stack to get proper data format
columns(:A10, :A20, :A30),
Source Label Column("SampleGroup"),
Output Table("Stack")
);
dt_specs = New Table("Specs",
Add Rows(2),
Compress File When Saved(1),
New Column("Variable", Character, "Nominal", Set Values({"L1", "L2"})),
New Column("LSL", Numeric, "Continuous", Format("Best", 12), Set Values([10, 30])),
New Column("Target", Numeric, "Continuous", Format("Best", 12), Set Values([20, 40])),
New Column("USL", Numeric, "Continuous", Format("Best", 12), Set Values([30, 50]))
);
dt << Update(
With(dt_specs),
Match Columns(:Phase = :Variable)
);
Close(dt_specs, no save);Re: 変動チャートでデータ カテゴリ別に仕様限界を定義する方法やあ、
方法1を使用したところ、うまくいきました。
L2 に USL/LSL がないようにしたい場合、どのように最適化すればよいでしょうか?
値を 0 に設定してみましたが、Y ゼロの位置に赤い線が表示されます。
I put //"L2" => ["LSL" => 0, "USL" => 0, //"Target" => 40], it's not work.
aa_specs = [
"L1" => ["LSL" => 10, "USL" => 30, "Target" => 20],
"L2" => ["LSL" => 0, "USL" => 0, //"Target" => 40]
];
Re: 変動チャートでデータ カテゴリ別に仕様限界を定義する方法値が不要な場合は、値を欠落として設定します。スクリプトで機能するはずです。
もっと見る...
Names Default To Here(1);
dt1 = Open("$DOWNLOADS/sample data.jmp");
dt = dt1 << Stack( // stack to get proper data format
columns(:A10, :A20, :A30),
Source Label Column("SampleGroup"),
Output Table("Stack")
);
aa_specs = [
"L1" => ["LSL" => 10, "USL" => 30, "Target" => 20],
"L2" => ["LSL" => 30, "USL" => ., "Target" => .]
];
// Add limits as they were not provided
dt << New Column("LSL", Numeric, Continuous);
dt << New Column("Target", Numeric, Continuous);
dt << New Column("USL", Numeric, Continuous);
For Each Row(dt,
:LSL = aa_specs[:Phase]["LSL"];
:USL = aa_specs[:Phase]["USL"];
:Target = aa_specs[:Phase]["Target"];
);
var = dt << Variability Chart(Y(:Data), X(:Phase, :SampleGroup));
dt_summary = dt << Summary(
Group(:Phase),
Max(:LSL),
Mean(:Target),
Min(:USL),
N Categories(:SampleGroup),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0)
);
dt_summary << Delete Columns("N Rows");
// We need access to the framebox
fb = Report(var)[Outline Box("Variability Chart for Data"), Frame Box(1)];
//Get phases count (this was missing)
Summarize(dt, phases = By(:Phase));
// Using graphic scripts most likely easiest option
xidx = 0;
For(i = 1, i <= N Items(phases), i++,
curphase = dt_summary[i, "Phase"];
curlsl = dt_summary[i, "LSL"];
curusl = dt_summary[i, "USL"];
curtarget = dt_summary[i, "Target"];
curcount = dt_summary[i, "SampleGroup"];
xend = xidx + curcount;
lslstart = Eval List({xidx, curlsl});
lslend = Eval List({xend, curlsl});
uslstart = Eval List({xidx, curusl});
uslend = Eval List({xend, curusl});
targetstart = Eval List({xidx, curtarget});
targetend = Eval List({xend, curtarget});
xidx = xend;
Eval(EvalExpr(
fb << Add Graphics Script(
Pen Color("Red");
Pen Size(1);
Line(Expr(lslstart), Expr(lslend)); // {x1, y1}, {x2, y2}
Line(Expr(uslstart), Expr(uslend)); // {x1, y1}, {x2, y2}
Pen Color("Blue");
Line(Expr(targetstart), Expr(targetend)); // {x1, y1}, {x2, y2}
);
));
);
fb << Y Axis(Max(1.1*Max(Col Max(Column(dt, "Data")), Col Max(Column(dt_summary, "USL"))))); // adjust yaxis
スクリプトを少し変更して、欠損値があるものは無視するようにすることもできますが、必ずしも必要ではありません。
Re: 変動チャートでデータ カテゴリ別に仕様限界を定義する方法こんにちは、ジャルモさん。
線からグラフ ボックスに変更しようとしましたが、以下の修正されたスクリプトでは機能しません。どのように修正すればよいでしょうか?
Eval(EvalExpr(
fb << Add Graphics Script(
Fill Color("Green");
Transparency( 0.3 );
Graph Box(Expr(lslstart), Expr(lslend)); // {x1, y1}, {x2, y2}
Graph Box(Expr(uslstart), Expr(uslend)); // {x1, y1}, {x2, y2}Re: 変動チャートでデータ カテゴリ別に仕様限界を定義する方法グラフィック スクリプト内でグラフ ボックスを変更しようとする特別な理由はありますか?
Re: 変動チャートでデータ カテゴリ別に仕様限界を定義する方法こんにちは、ジャルモさん。
X 軸のフェーズ/グループのセットが複数ある場合、この線によってボックスプロットのデータ ポイントが見えにくくなる可能性があります。代わりに次の画像を使用します。

Re: 変動チャートでデータ カテゴリ別に仕様限界を定義する方法次に、Line() の代わりに Rect を使用できます。グラフ ボックスは必要ありません (グラフ ボックスは基本的に既に存在します)。このオプションを使用する場合は、欠落したポイントによって Rect() で問題が発生するため、何らかの方法で欠落した値を管理する必要があります。

Eval(EvalExpr(
fb << Add Graphics Script(
Transparency(0.2);
Pen Color("Green");
Fill Color("Green");
Rect(Expr(lslstart), Expr(uslend), 1);
);
));Re: 変動チャートでデータカテゴリごとに仕様限界を定義する方法こんにちは、Jarmoさん
早急なご返信ありがとうございます。
X 軸の値を追加するためのもう 1 つの質問。
他のX値(SampleA)を入力する際に、以下のスクリプトを修正しました。しかし、限界線の結果が正しくありません。どうすれば修正できますか?
var = dt << Variability Chart(Y(:Data), X(:Phase, :SampleGroup, :SampleA));
dt_summary = dt << Summary(
Group(:Phase),
Max(:LSL),
Mean(:Target),
Min(:USL),
N Categories(:SampleGroup, :SampleA),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0)
);
dt_summary << Delete Columns("N Rows");
// We need access to the framebox
fb = Report(var)[Outline Box("Variability Chart for Data"), Frame Box(1)];
//Get phases count (this was missing)
Summarize(dt, phases = By(:Phase));
// Using graphic scripts most likely easiest option
xidx = 0;
For(i = 1, i <= N Items(phases), i++,
curphase = dt_summary[i, "Phase"];
curlsl = dt_summary[i, "LSL"];
curusl = dt_summary[i, "USL"];
curtarget = dt_summary[i, "Target"];
curcount = dt_summary[i, "SampleGroup", "SampleA"];
xend = xidx + curcount;
lslstart = Eval List({xidx, curlsl});
lslend = Eval List({xend, curlsl});
uslstart = Eval List({xidx, curusl});
uslend = Eval List({xend, curusl});
targetstart = Eval List({xidx, curtarget});
targetend = Eval List({xend, curtarget});
xidx = xend;
Eval(EvalExpr(
fb << Add Graphics Script(
Pen Color("Red");
Pen Size(1);
Line(Expr(lslstart), Expr(lslend)); // {x1, y1}, {x2, y2}
Line(Expr(uslstart), Expr(uslend)); // {x1, y1}, {x2, y2}
Pen Color("Blue");
Line(Expr(targetstart), Expr(targetend)); // {x1, y1}, {x2, y2}
);
));
);
fb << Y Axis(Max(1.1*Max(Col Max(Column(dt, "Data")), Col Max(Column(dt_summary, "USL"))))); // adjust yaxisRe: 変動チャートでデータカテゴリごとに仕様限界を定義する方法制限はどのように設定されていますか(どのグループに基づいて設定されていますか?)何が問題なのでしょうか?おそらく、Summary、Summarize、およびcurrentcountの値を調整する必要があるでしょう。
Re: 変動チャートでデータカテゴリごとに仕様限界を定義する方法はい、その点に気付きましたので、集計と現在の値のスクリプトを修正しました。ただし、限界線はフェーズ内の条件をすべて完全にカバーすることはできません。限界線は依然として「フェーズ」に基づいています。 (SampleAのX軸に新しい値がないことは無視してください。)

Re: 変動チャートでデータカテゴリごとに仕様限界を定義する方法メインテーブルに、例えばSampleGroupとSampleAを連結した新しい列を作成できます。そして、それをサマリーのN個のカテゴリと現在のカウントに使用して、正しいカウントを取得します。
Re: 変動チャートでデータカテゴリごとに仕様限界を定義する方法var = dt << Variability Chart(Y(:Data), X(:Phase, :SampleGroup, :SampleA));
dt_summary = dt << Summary(
Group(:Phase),
Max(:LSL),
Mean(:Target),
Min(:USL),
N Categories(:SampleGroup, :SampleA),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0)
);
dt_summary << Delete Columns("N Rows");
// We need access to the framebox
fb = Report(var)[Outline Box("Variability Chart for Data"), Frame Box(1)];
//Get phases count (this was missing)
Summarize(dt, phases = By(:Phase));
// Using graphic scripts most likely easiest option
xidx = 0;
For(i = 1, i <= N Items(phases), i++,
curphase = dt_summary[i, "Phase"];
curlsl = dt_summary[i, "LSL"];
curusl = dt_summary[i, "USL"];
curtarget = dt_summary[i, "Target"];
curcount = dt_summary[i, "N Rows"];
上記のスクリプトを修正しましたが、限界線を生成できません。どうすれば修正できますか?
Re: 変動チャートでデータカテゴリごとに仕様限界を定義する方法何が問題なのでしょうか (データがないので確認できません)?
Re: 変動チャートでデータカテゴリごとに仕様限界を定義する方法テスト データとスクリプトについては添付ファイルを参照してください。
Re: 変動チャートでデータカテゴリごとに仕様限界を定義する方法先ほども述べたように、最も簡単な方法は、新しいグループ化列を作成し、それをサマリーテーブルで使用することです。複数のグループにまたがるn個のカテゴリの合計を取得するだけでも十分かもしれません。
curcount = Sum(dt_summary[i, {"Leg", "Layer"}]);Re: 変動チャートでデータカテゴリごとに仕様限界を定義する方法やあ、
スクリプト不要のソリューションを探していて、Graph Builder を使用しても問題ない場合、Graph Builder は実際にカテゴリごとに複数レベルの仕様制限を処理します。仕様制限がそれに応じて構造化されていることを確認してください (列プロパティなどを使用)。
変動性チャートを使い続けたい場合、この機能はJMP本体には組み込まれていませんが、テストデータ分析用に開発されたプラグインであるYieldOptiXでサポートされています。これにより、変動性チャートでカテゴリベースの仕様限界を直接設定できるようになります。
したがって、両方のオプション (グラフ ビルダーまたはグループ化された制限付きの変動チャート) は、優先するインターフェイスに応じてサポートされます。つまり、プロセスに最適なものによって異なります。
Re: 変動チャートでデータカテゴリごとに仕様限界を定義する方法こんにちは、Jarmo
複数のデータを入力すると、仕様制限がスクリプトの内容と一致しません。スクリプトをどのように修正すればよいでしょうか?
Re: 変動チャートでデータカテゴリごとに仕様限界を定義する方法グループ数は別の方法で計算する必要があります。非常に簡単な方法としては、レッグとレイヤーを組み合わせた新しい列をdtに追加することが挙げられます。
dt << new column("LEGLAYER", Character, Nominal, Formula(:Leg ||:Layer));
それを要約に使う
dt_summary = dt << Summary(
Group(:SampleGroup),
Max(:LSL),
//Mean(:Target),
Min(:USL),
N Categories(:LEGLAYER),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0)
);
そこから現在値を取得します
curcount = Sum(dt_summary[i, {"LEGLAYER"}]);

Re: 変動チャートでデータカテゴリごとに仕様限界を定義する方法共有していただいたスクリプトを使用しましたが、スペック制限が表示されません。
添付ファイルとしてスクリプトをチェックして、それを変更する方法を教えてください。