在 JMP 版本中使用 JSL。 15.2.0。 JSL 代码嵌入在附表中,脚本名称 = '控制图'。
尝试通过自定义图形脚本为可变数量的阶段分组和“位置”条件添加规格限制(LSL、目标、USL)时,我正在努力解决嵌套循环中的行为。我的嵌套循环目前导致最后一个图表的规格限制应用于创建的所有控制图表,而不是每个图表/阶段/条件接收其各自的限制。
非常感谢您朝正确的方向轻推!
托德
Todd,与更典型的编程语言相比,JMP / JSL 有点奇怪——特别是,您几乎必须自己进行所有范围控制。
我这里有一个例子来说明你正在处理的事情——有人可能会认为下面的脚本会创建一个“红色的”然后“蓝色的”图形脚本中的三角形,但只创建了两个蓝色三角形。
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = Bivariate( Y( :weight ), X( :height ), FitLine );
rbiv = biv << report;
framebox = rbiv[frame box( 1 )];
/**** Make a red triangle??? ****/
color = "Red";
framebox << Add Graphics Script(
Transparency( 0.5 );
Fill Color( color );
Polygon( [60, 72, 57], [75, 120, 120] );
);
/**** Make a blue triangle??? ****/
color = "Blue";
framebox << Add Graphics Script(
Transparency( 0.5 );
Fill Color( color );
Polygon( [60, 72, 57], [85, 130, 130] );
);
这是因为 JSL 处理范围的方式——当您使用<<添加图形脚本()函数然后它被添加为一组未评估的语句(实际上它是一个未评估的胶水()功能)。 存在于<<添加图形脚本()脚本将被评估仅在执行期间的脚本。当图形脚本运行时(记住,它附加到框框它嵌入在窗口的显示树中)它将需要解析每个变量。范围解析规则规定它将调查当地的范围(如果存在),这里范围(如果存在),则全球的范围 - 如果在任何这些范围中都找不到它们,它将被替换为空的()价值。
所以脚本被添加到框框在主脚本内部,但仅在稍后执行。此时,颜色变量为“蓝色的” ,因此两个三角形都是蓝色的。
解决这个问题的方法是解决任何感兴趣的变量添加时图形脚本,而不是在执行它时。为此,请使用评估(评估表达式())方法,如此处所示。
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = Bivariate( Y( :weight ), X( :height ), FitLine );
rbiv = biv << report;
framebox = rbiv[frame box( 1 )];
/**** Make a red triangle!!! ****/
color = "Red";
Eval( Eval Expr(
framebox << Add Graphics Script(
Transparency( 0.5 );
Fill Color( Expr( color ) );
Polygon( [60, 72, 57], [75, 120, 120] );
);
) );
/**** Make a blue triangle!!! ****/
color = "Blue";
Eval( Eval Expr(
framebox << Add Graphics Script(
Transparency( 0.5 );
Fill Color( Expr( color ) );
Polygon( [60, 72, 57], [85, 130, 130] );
);
) );
您需要对所有变量使用此方法<<添加图形脚本()函数,以便他们保持当时的价值<<添加图形脚本()被称为。