在 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] );
);
) );
您需要對所有變量使用此方法<<添加圖形腳本()函數,以便他們保持當時的價值<<添加圖形腳本()被稱為。