如何使用 JSL 脚本以数值形式更新 Y 轴参考线标签(使用 USL LSL 标签自动绘图)正如标题所述,如何使用 JSL 脚本(使用 USL LSL 标签自动绘图)以数值形式更新 Y 轴参考线标签?
我目前正在使用 JSL 脚本从一组数据表中生成一系列图表,以便一键显示带有 USL/LSL 限值的分布图。图中显示的那些限值基于管理限值表(我更新了值)。但还有一步需要改进,即根据管理限值表以实际数值显示那些 USL/LSL 标签,我找不到相关的 JSL 命令来自动化它,除非我必须手动逐个更新标签。有人知道如何显示一些示例吗?提前致谢。

For( i = 1, i <= 100, i++,
xCol = Column(dt, i);
if ( Mod( i-8, 5 ) == 0,
rowBox = hlistbox();
win << Append( rowBox )
);
rowBox << Append(
//New Window( "training - Fit Y by X by Serial",
//dt << Fit Group(
Graph Builder(
Size( 350, 350 ),
Fit to Window("off"),
Show Control Panel( 0 ),
Show Title ( 1 ),
Show Subtitle ( 0 ),
Show Legend( 1 ),
Show Header ( 0 ),
Show Footer ( 0 ),
//Update Variable to Column Name
Variables(X( :TEMP ),Y( xCol ),Overlay( :Unit )),
Elements( Smoother( X, Y, Legend( 8 ) ), Points( X, Y, Legend( 9 ) ) ),
SendToReport(
Dispatch(
{}, "Graph Builder",
OutlineBox, {Set Title( "" ), Image Export Display(Normal)},
),
Dispatch(
{}, "Graph Builder",
FrameBox,{Transparency(0.8), Left( 0 ), Right( 0 ), Top( 1 ), Bottom( 1 )},
)
//To update labels USL/LSL limits in numeric value
)
)自动化和脚本基础数据分析与建模视窗回复:如何使用 JSL 脚本以数值形式更新 Y 轴参考线标签(使用 USL LSL 标签自动绘图)这可能会提供一些想法https://community.jmp.com/t5/Discussions/Change-Line-Color-and-Line-Style-in-all-platforms/mp/819799/highlight/true#M99792
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
ml = dt << Manage Limits(
Process Variables(dt << Get Column Group("Processes")),
);
ml << Show Limits All;
ml << Save to Column Properties;
ml << Close Window;
dt << Distribution(
Stack(1),
Continuous Distribution(
Column(:NPN1),
Horizontal Layout(1),
Vertical(0),
Process Capability(Use Column Property Specs)
)
);
// "Tool script" starts from here
// Names Default To Here(1);
abs = Current Report() << XPath("//AxisBox");
names = {"A", "B", "C", "D"};
idx = 0;
For Each({ab}, abs,
s = ab << get script;
For Each({cur_s}, s,
If(Head Name(cur_s) == "Add Ref Line",
l = Substitute(Name Expr(cur_s), Expr(Add Ref Line()), Expr(List()));
If(Contains(l, "LSL") | Contains(l, "Target") | Contains(l, "USL"),
// this isn't documented
idx++;
Eval(EvalExpr(
ab << Update Ref Line(1, Expr(idx), "Solid", "Orange", names[idx], 3);
));
);
);
);
);
如果只是一个特定的平台和一个轴,那么这很可能可以简化
回复:如何使用 JSL 脚本以数值形式更新 Y 轴参考线标签(使用 USL LSL 标签自动绘图)这是一个简单的脚本,它设置列的规格限值,然后运行图形生成器,图形生成器会自动显示规格限值

Names Default To Here( 1 );
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Big Class.jmp" );
htUSL = 66;
htLSL = 55;
Eval(
Eval Expr(
dt:height << set property(
"spec limits",
{LSL( Expr( htLSL ) ), USL( Expr( htUSL ) ), Show Limits( 1 )}
)
)
);
dt << Graph Builder(
Size( 534, 456 ),
Show Control Panel( 0 ),
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 3 ) ), Smoother( X, Y, Legend( 4 ) ) )
);
回复:如何使用 JSL 脚本以数值形式更新 Y 轴参考线标签(使用 USL LSL 标签自动绘图)谢谢 nelson,该代码与我的代码类似,并且它也不能以数值形式显示 USL LSL 的参考线。
我尝试使用 Num(htUSL) 将其更改为数值,但它生成的图根本没有参考线,我们必须使用 Expr (htUSL) 来显示线条。似乎没有其他选项可以通过 JSL 脚本以数值形式显示这些限制,除非手动方式。
htUSL = 66;
htLSL = 55;
Eval(
Eval Expr(
dt:height << set property(
"spec limits",
{LSL( Expr( htLSL ) ), USL( Expr( htUSL ) ), Show Limits( 1 )},
{LSL( Num( htLSL ) ), USL( Num( htUSL ) ), Show Limits( 1 )}, //Not working
)
)
);回复:如何使用 JSL 脚本以数值形式更新 Y 轴参考线标签(使用 USL LSL 标签自动绘图)谢谢 Jarmo。这非常适合以过程能力的方式显示图表,它还显示 USL LSL 而不是数值。我已经更新了管理限制表,只是希望再多一步,通过 JSL 脚本在图表中以数值形式显示这些限制。
回复:如何使用 JSL 脚本以数值形式更新 Y 轴参考线标签(使用 USL LSL 标签自动绘图)为什么在 Set Property("Spec Limits") 函数中使用 2 个列表?Spec Limits 只允许一组限制。此外,Eval( EvalExpr() 函数在封闭函数中查找 Expr(),并扩展每个 Expr() 的值,然后 Eval() 函数可以正确评估它。在第二个 Spec Limits 规范中,您用 Num() 替换了 Expr()。因为它位于 JMP List 内部,所以不会评估它或 htLSL 和 htUSL,因此传递给 JSL 的内容对于 JMP 来说是未知的。
如果您尝试运行多个列,则每个列都必须有单独的规格限制。
您是否运行了我的示例....没有进行任何更改?如果是这样,它是否会生成带有 USL 和 LSL 参考线的图表?
回复:如何使用 JSL 脚本以数值形式更新 Y 轴参考线标签(使用 USL LSL 标签自动绘图)嗨,吉姆,这是关于用数值而不是“USL”文本来更改参考线。
您的代码示例能够显示带有 USL、LSL 参考线的图表而不进行任何更改,我只想将 USL/LSL 显示为数值(参考管理限制表)。
附上快照以显示我希望以数值形式更改 USL、LSL(见右侧),但希望可以在 JSL 脚本中实现自动化。谢谢。

回复:如何使用 JSL 脚本以数值形式更新 Y 轴参考线标签(使用 USL LSL 标签自动绘图)以下是使用现有限值表创建参考线的示例。有 2 个不同的示例,使用 2 种不同的方法

Names Default To Here( 1 );
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Big Class.jmp" );
// open a limits table created from Manage Limits
dtLimit = New Table( "Limits",
Add Rows( 2 ),
New Column( "Variable", Character, "Nominal", Set Values( {"height", "weight"} ) ),
New Column( "LSL", Set Values( [55, 65] ) ),
New Column( "USL", Set Values( [66, 170] ) ),
New Column( "Target", Set Selected, Set Values( [., .] ) )
);
// One way to set the reference lines
colNames = dt << get column names( string, continuous );
// Create the graphs
For Each( {col}, colNames,
gb = dt << Graph Builder(
Size( 534, 456 ),
Show Control Panel( 0 ),
Variables( X( :age ), Y( As Column( col ) ) ),
Elements( Points( X, Y, Legend( 3 ) ), Smoother( X, Y, Legend( 4 ) ) )
);
// Set the ref lines
// Get the row in the limits table that has the limits for the current column
theRow = (dtLimit << get rows where( dtLimit:Variable == col ))[1];
Report( gb )[AxisBox( 2 )] << add ref line(
dtLimit:LSL[theRow],
"Solid",
"Blue",
Char( dtLimit:LSL[theRow] ),
1
);
Report( gb )[AxisBox( 2 )] << add ref line(
dtLimit:USL[theRow],
"Solid",
"Blue",
Char( dtLimit:USL[theRow] ),
1
);
);
// Second way to set the reference lines using Spec Limits column property
// the default when using the Spec Limits is for graph builder to insure
// the spec limits are displayed on the graph. This example with use the
// spec limits, and then change the label to a numeric
colNames = dt << get column names( string, continuous );
ml = dt << Manage Limits( Process Variables( Eval( colNames ) ) );
ml << load from limits table( dtLimit );
ml << Show Limits All;
ml << Save to Column Properties;
ml << Close Window;
// Create the graphs
For Each( {col}, colNames,
gb = dt << Graph Builder(
Size( 534, 456 ),
Show Control Panel( 0 ),
Variables( X( :age ), Y( As Column( col ) ) ),
Elements( Points( X, Y, Legend( 3 ) ), Smoother( X, Y, Legend( 4 ) ) )
);
// Set the ref lines
// Get the limits from the spec limits for the current column
// and change the label
specs = Column( dt, col ) << get property( spec limits );
Report( gb )[AxisBox( 2 )] << add ref line( specs["LSL"], "Solid", "Blue", Char( specs["LSL"] ), 1 );
Report( gb )[AxisBox( 2 )] << add ref line( specs["USL"], "Solid", "Blue", Char( specs["USL"] ), 1 );
);回复:如何使用 JSL 脚本以数值形式更新 Y 轴参考线标签(使用 USL LSL 标签自动绘图)我猜你没有理解我提供的脚本,因为它确实展示了如何在图中重命名规格限值。这将使用值而不是 LSL、USL 和目标文本
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
ml = dt << Manage Limits(
Process Variables(dt << Get Column Group("Processes")),
);
ml << Show Limits All;
ml << Save to Column Properties;
ml << Close Window;
gb = dt << Graph Builder(
Size(528, 448),
Show Control Panel(0),
Variables(X(:SITE), Y(:NPN1)),
Elements(Points(X, Y, Legend(3)))
);
abs = Report(gb) << XPath("//AxisBox");
idx = 0;
For Each({ab}, abs,
s = ab << get script;
For Each({cur_s}, s,
If(Head Name(cur_s) == "Add Ref Line",
l = Substitute(Name Expr(cur_s), Expr(Add Ref Line()), Expr(List()));
If(Contains(l, "LSL") | Contains(l, "Target") | Contains(l, "USL"),
idx++;
Eval(EvalExpr(
ab << Update Ref Line(1, Expr(idx), "Solid", "Blue", Char(l[1]), 1);
));
);
);
);
);

最有可能的是,最好不要使用启用了“显示限制”的规格限制列属性,而只需根据列属性以您自己的名称添加限制作为参考线
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
gb = dt << Graph Builder(
Size(528, 448),
Show Control Panel(0),
Variables(X(:SITE), Y(:NPN1)),
Elements(Points(X, Y, Legend(3)))
);
specs = Column(dt, "NPN1") << get property("Spec Limits");
Report(gb)[AxisBox(2)] << Add Ref Line(
specs["LSL"], "Solid", "Blue", Char(specs["LSL"]), 1
);
Report(gb)[AxisBox(2)] << Add Ref Line(
specs["USL"], "Solid", "Blue", Char(specs["USL"]), 1
);
回复:如何使用 JSL 脚本以数值形式更新 Y 轴参考线标签(使用 USL LSL 标签自动绘图)谢谢你假期的回复,Jim。我现在可以用第二种方法将其设置为数值。
回复:如何使用 JSL 脚本以数值形式更新 Y 轴参考线标签(使用 USL LSL 标签自动绘图)感谢 Jarmo 提供的示例。给出的两个示例都运行良好。自动化已完成。