如何在变异性图表中按数据类别定义规格限值你好,
如何在变异性图表中按数据类别绘制规格限值(红线),如下例所示?红线是在 pptx 中手动绘制的。
附上 jmp 文件数据以供参考。感谢您的回复。谢谢。

自动化和脚本基础数据分析与建模视窗回复:如何在变异性图表中按数据类别定义规格限值变异性图表中按数据类别改变规格限值能给出一些想法吗?
回复:如何在变异性图表中按数据类别定义规格限值你好呀,
我检查并按照步骤操作,但仍然不起作用,甚至直接使用了其附件文件和脚本。
回复:如何在变异性图表中按数据类别定义规格限值使用您的数据(+添加限制)并对该线程中的脚本进行小幅修复

回复:如何在变异性图表中按数据类别定义规格限值嗨,jthi,
你确实画出了我想要的图表,但我仍然不知道如何修改脚本。无论如何,谢谢你的回复
回复:如何在变异性图表中按数据类别定义规格限值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回复:如何在变异性图表中按数据类别定义规格限值嗨,jthi,
感谢您的脚本,它已成功运行。
关于下面的限制设置,如果我有最多 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回复:如何在变异性图表中按数据类别定义规格限值这些限制是如何形成的(基于哪些组)?出了什么问题?很可能你需要调整“摘要”,也可能调整“摘要”和“当前计数”的值。
回复:如何在变异性图表中按数据类别定义规格限值是的,我注意到了,所以我修改了“汇总”和“当前计数值”的脚本。但是限制线无法完全覆盖相位下的所有条件。限制仍然基于“相位”。 (请忽略没有新的 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"}]);

回复:如何在变异性图表中按数据类别定义规格限值我使用了您分享的脚本,但是规格限制没有显示出来。
请帮忙查看附件中的脚本,如何修改?