通过 JSL 将规格限制设置为列属性 - 图中未显示的线你好
我有一个脚本,将规格限制 (USL/LSL) 分配给列属性,然后绘制该列的图,我希望
查看绘图上绘制的限制线。 发生的情况是限制在表中设置正确,但在图上不可见。
如果我在运行脚本后手动将相同的绘图绘制到此列 - 不再有线条。
如果我打开列规格属性窗口,我会看到限制,“显示参考线”处于打开状态。
仅当我点击“应用”然后再次绘图时 - 我可以按预期看到绘图上的线条。 但我无法通过脚本让它工作..
任何想法?
(使用 JMP PRO 15)


高级统计建模自动化和脚本数据访问大规模定制质量与工艺工程视窗回复:通过 JSL 将规格限制设置为列属性 - 图中未显示的线吉姆,谢谢你成功了。
回复:通过 JSL 将规格限制设置为列属性 - 图中未显示的线这个 JSL 应该可以解决问题
// Your code
datacolnames = res_thk_specs:colname << get values;
specExpr = Expr(
Column( Res_Thk_Data, name ) <<
Set Property(
"Spec Limits",
{LSL( Expr( lower ) ), USL( Expr( upper ) ),
TARGET( Expr( target ) ), Show Limits( 1 )}
)
);
For( i = 1, i <= N Rows( RES_THK_SPECS ), i++,
name = Column( RES_THK_SPECS, "COLNAME" )[i];
lower = Column( RES_THK_SPECS, "LSL" )[i];
upper = Column( RES_THK_SPECS, "USL" )[i];
target = Column( RES_THK_SPECS, "TARGET" )[i];
_unit_ = Column( RES_THK_SPECS, "UOM" )[i];
If( Contains( datacolnames, name ),
Eval( Eval Expr( specExpr ) )
);
If( Contains( datacolnames, name ),
Column( Res_Thk_Data, name ) << Set Property( "Units", eval( _unit_ ) )
);
);回复:通过 JSL 将规格限制设置为列属性 - 图中未显示的线吉姆,感谢您的回复。我跑了,限制被添加到表中。我遇到问题的部分是向列属性添加单位。当我从我的代码中删除注释时,单位列属性确实得到填充,但没有填充所需的英寸或磅值。相反,两者都充满了 List 的价值。我不清楚在从数据表单元格传输文本的表达式语句或求值语句中缺少什么。任何帮助都会
赞赏。
回复:通过 JSL 将规格限制设置为列属性 - 图中未显示的线这是一个使用您的代码的简单示例。如果它仍然不适用于您的数据表,请查找与列名不一致的地方
Names Default To Here( 1 );
res_thk_specs = New Table( "thelookup",
Add Rows( 2 ),
New Column( "UOM",
Character,
"Nominal",
Set Values( {"inches", "lbs"} ),
Set Display Width( 48 )
),
New Column( "TARGET",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [60, 115] )
),
New Column( "USL",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [70, 172] )
),
New Column( "LSL",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [50, 60] ),
Set Display Width( 89 )
),
New Column( "colname",
Character,
"Nominal",
Set Values( {"height", "weight"} ),
Set Display Width( 0 )
)
);
res_thk_data = New Table( "thedata",
Add Rows( 5 ),
New Column( "height",
Numeric,
"Continuous",
Format( "Fixed Dec", 5, 0 ),
Set Values( [59, 61, 55, 66, 52] )
),
New Column( "weight",
Numeric,
"Continuous",
Format( "Fixed Dec", 5, 0 ),
Set Selected,
Set Values( [95, 123, 74, 145, 64] )
)
);
// Your code
datacolnames = res_thk_specs:colname << get values;
specExpr = Expr(
Column( Res_Thk_Data, name ) <<
Set Property(
"Spec Limits",
{LSL( Expr( lower ) ), USL( Expr( upper ) ),
TARGET( Expr( target ) ), Show Limits( 1 )}
)
);
//unitExpr = Expr(
// column ( Res_Thk_Data, name ) << Set Property(
// "Units", { _unit_ }
// )
//);
For( i = 1, i <= N Rows( RES_THK_SPECS ), i++,
name = Column( RES_THK_SPECS, "COLNAME" )[i];
lower = Column( RES_THK_SPECS, "LSL" )[i];
upper = Column( RES_THK_SPECS, "USL" )[i];
target = Column( RES_THK_SPECS, "TARGET" )[i];
_unit_ = Column( RES_THK_SPECS, "UOM" )[i];
If( Contains( datacolnames, name ),
Eval( Eval Expr( specExpr ) )
);
// If( Contains( datacolnames, name ),
// Eval( Eval Expr( unitExpr ) )
// );
);回复:通过 JSL 将规格限制设置为列属性 - 图中未显示的线我使用一种非常相似的方法从极限表中获取极限,以将规格极限添加到列属性中。我想尝试使用类似的方法根据限制表中的值更新单位。目前在代码显示中被注释掉了,但是当我运行时,我得到一个值“List”作为单位属性而不是所需的单位。我认为这是语法问题,但到目前为止还没有找到 eval expr 语句的正确语法。
回复:通过 JSL 将规格限制设置为列属性 - 图中未显示的线我不确定为什么没有花括号它会表现得像那样,因为使用它们似乎是正确的语法JMP 帮助 - 列属性
col << Set Property( "propertyName", {argument list} );
JMP 必须在内部保存一些信息,因为如果您运行不带花括号的命令并检查列属性,它看起来很好,但如果您使用复制列属性,您只会得到第一个参数(因为您没有列表参数):
Add Column Properties(
Set Property("Notes", "Explore data adventurously"),
Set Property("Spec Limits", LSL(50))
)
然后在 Spec Limits 列属性中按下 Apply 后,参数将更新为正确的列表:
Add Column Properties(
Set Property("Notes", "Explore data adventurously"),
Set Property("Spec Limits", {LSL(50), USL(150), Show Limits(1)})
)回复:通过 JSL 将规格限制设置为列属性 - 图中未显示的线谢谢 !确实添加花括号解决了问题:)
你能解释一下为什么吗
回复:通过 JSL 将规格限制设置为列属性 - 图中未显示的线您似乎是在最初显示图表后应用限制。限制是在图表最初显示时绘制的,如果在该点之后添加限制,则必须重新绘制图表才能显示它们。
回复:通过 JSL 将规格限制设置为列属性 - 图中未显示的线语法似乎略有偏差,您必须在 Spec Limits 之后添加 {}。 请参阅下面的脚本,如果不按应用,重量将不起作用,高度将起作用。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
Column(dt, "weight") << Set Property("Spec Limits", LSL(50), USL(150), Show Limits(1));
Column(dt, "height") << Set Property("Spec Limits", {LSL(50), USL(100), Show Limits(1)});
gb = dt << Graph Builder(
Size(534, 456),
Show Control Panel(0),
Variables(X(:weight), Y(:height)),
Elements(Points(X, Y, Legend(4)), Smoother(X, Y, Legend(5)))
);回复:通过 JSL 将规格限制设置为列属性 - 图中未显示的线感谢您的及时回复! 我认为代码并不是真正相关的,因为它确实在列属性中正确设置了规范限制。
它设置了 LSL 和 USL 并显示限制 (1),但即使设置正确,绘图也不会显示它们。
即使我使用固定数字的直接代码,它的行为也是一样的..
Column(DATA_DT,param) << Set Property( "Spec Limits", LSL( 0.31 ),USL(0.34),Show Limits(1) );

只有在点击“应用”并再次绘制图形后 - 它才会显示线条。
回复:通过 JSL 将规格限制设置为列属性 - 图中未显示的线你好@shlomi_bakish ,
你能提供一个你的 JSL 代码的例子吗? 这可能有助于诊断您遇到的问题。 同时,这部分代码是您如何设置列的规范限制并确保它们已打开以进行绘图的示例。
//Turn on spec lines for graphs
dt = Current Data Table( ); //just a way of setting the current data table to the variable dt
<BR />dt_ColNames = dt << Get Column Names( string ); //Gets the column names from the data table
<BR />For( i = 1, i <= N Items( dt_ColNames ), i++,<BR />
spec = Column( dt, dt_ColNames[i] ) << Get Property( "Spec Limits" ); //This gets the Boolean spec property of each column
<BR />//now, for each column perform the task of assigning the spec limits<BR /> If( Is Empty( spec ) == 0,
LSL = Try( spec["LSL"], . );
USL = Try( spec["USL"], . );
Target = Try( spec["Target"], . );
Eval(
Substitute(
Expr(
Column( dt, dt_ColNames[i] ) << Set Property(
"Spec Limits",
{LSL( __LSL__ ), USL( __USL__ ), Target( __Target__ ), Show Limits( 1 )}
),
),
Expr( __LSL__ ), LSL,
Expr( __USL__ ), USL,
Expr( __Target__ ), Target
)
);//This whole Eval() is wrapping a Substitution(), which wraps an expression Expr(). <BR /> //The variables that will be substituted are __LSL__ and so on. The Show Limits (1) checks the box to turn on the limits as reference lines.
);
);这应该可以帮助您朝着正确的方向前进。 但是,如果没有看到您的代码并且不了解您在做什么,就很难更具体地满足您的确切需求。
希望这可以帮助!,
DS