如何在變異性圖表中按資料類別定義規格限值你好,
如何在變異性圖表中根據資料類別繪製規格限值(紅線),如下例所示?紅線是在pptx中手工畫出來的。
附上jmp檔案資料供參考。感謝您的回覆。謝謝。

自動化和腳本基礎資料分析與建模視窗回覆:如何在變異性圖表中按資料類別定義規格限值變異性圖表中依資料類別改變規格限值能給出一些想法嗎?
回覆:如何在變異性圖表中按資料類別定義規格限值你好呀,
我檢查並按照步驟操作,但仍然不起作用,甚至直接使用了其附件文件和腳本。
回覆:如何在變異性圖表中按資料類別定義規格限值使用您的資料(+新增限制)並對該線程中的腳本進行小幅修復

回覆:如何在變異性圖表中按資料類別定義規格限值你好呀,
你確實畫出了我想要的圖表,但我仍然不知道如何修改腳本。無論如何,謝謝你的回复
回覆:如何在變異性圖表中按資料類別定義規格限值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 yaxis回覆:如何在變異性圖表中按資料類別定義規格限值你好呀,
感謝您的腳本,它已成功運行。
關於下面的限制設置,如果我最多有 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]));回覆:如何在變異性圖表中按資料類別定義規格限值您可以建立規格限製表,或者,如果您沒有太多參數,則可以建立關聯數組
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);回覆:如何在變異性圖表中按資料類別定義規格限值你好呀,
當我使用方法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]
];
回覆:如何在變異性圖表中按資料類別定義規格限值如果您不希望擁有它,我會將該值設為缺失,並且我認為它應該與腳本一起工作。
看更多...
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
您也可以稍微修改腳本,確保它忽略那些缺少值的數據,但這可能沒有必要
回覆:如何在變異性圖表中按資料類別定義規格限值你好,Jarmo,
我嘗試從行更改為圖形框,但它不適用於下面修改後的腳本。我該如何修改?
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}回覆:如何在變異性圖表中按資料類別定義規格限值嘗試修改圖形腳本中的圖形框是否有特定的原因?
回覆:如何在變異性圖表中按資料類別定義規格限值你好,Jarmo,
當有多組 X 軸相位/組時,此線可能會遮擋箱線圖資料點。我想使用下面的圖片來代替。

回覆:如何在變異性圖表中按資料類別定義規格限值然後您可以使用 Rect 而不是 Line(),不需要圖形框(圖形框基本上已經存在)。如果選擇此選項,則必須以某種方式管理缺失值,因為缺失點將導致 Rect() 出現問題

Eval(EvalExpr(
fb << Add Graphics Script(
Transparency(0.2);
Pen Color("Green");
Fill Color("Green");
Rect(Expr(lslstart), Expr(uslend), 1);
);
));回覆:如何在變異性圖表中按資料類別定義規格限值你好,Jarmo,
感謝您的及時回覆。
還有一個關於增加額外 X 軸值的問題。
當我輸入其他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 yaxis回覆:如何在變異性圖表中按資料類別定義規格限值這些限制是如何形成的(基於哪些群體)?出了什麼問題?最有可能的是,您必須調整摘要、可能的摘要和 curcount 值。
回覆:如何在變異性圖表中按資料類別定義規格限值是的,我注意到了,所以我修改了Summarize 和 curcount 值的腳本。但極限線並不能完全覆蓋相位下的所有條件。限制仍然基於“階段”。 (請忽略沒有新的 SampleA X 軸)

回覆:如何在變異性圖表中按資料類別定義規格限值您可以在主表中建立新列,例如連接 SampleGroup、:SampleA 的組合。然後將其用於摘要中的 N 類別和 curcount 以獲得正確的計數。
回覆:如何在變異性圖表中按資料類別定義規格限值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"];
我修改了上面的腳本,但是限制線無法產生。我該如何修改它?
回覆:如何在變異性圖表中按資料類別定義規格限值它出了什麼問題(我沒有你的數據所以我無法檢查)?
回覆:如何在變異性圖表中按資料類別定義規格限值測試資料和腳本請參閱附件。
回覆:如何在變異性圖表中按資料類別定義規格限值就像我之前說的,最簡單的選擇是建立新的分組列並在摘要表中使用它。僅獲取多個組中 n 個類別的總和可能就足夠了
curcount = Sum(dt_summary[i, {"Leg", "Layer"}]);回覆:如何在變異性圖表中按資料類別定義規格限值你好呀,
如果您正在尋找無腳本解決方案並且可以使用 Graph Builder,它實際上可以按類別處理多層規格限制 - 只需確保您的規格限制具有相應的結構(例如,透過列屬性)。
如果您特別想使用變異性圖表,這種行為並不是核心 JMP 內建的 - 但它在 YieldOptiX(為測試資料分析開發的插件)中受支援。它直接在可變性圖表中添加了對基於類別的規格限制的支援。
因此,根據您喜歡的介面,兩種選項(圖形產生器或具有分組限制的可變性圖表)均受支援 - 僅取決於最適合您的流程的選項。
回覆:如何在變異性圖表中按資料類別定義規格限值你好,Jarmo
當我輸入多個數據時,規格限制不符合腳本內容。我該如何修改腳本?
回覆:如何在變異性圖表中按資料類別定義規格限值您必須以不同的方式計算群組計數。一個相當簡單的選項是,在 dt 中新增一個新列,該列結合了 leg 和 layer。
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"}]);

回覆:如何在變異性圖表中按資料類別定義規格限值我使用了您分享的腳本,但是規格限制沒有顯示出來。
請幫忙查看附件中的腳本,如何修改?