<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />大家好,
我正在編寫一個 JMP 腳本,該腳本創建一個帶有復選框和下拉菜單的窗口。 這些菜單用於選擇條件,然後可用於運行報告和生成圖表。 我正在製作的一張圖表上有不同數量的線條,具體取決於選中的複選框數量。 無論選擇哪個複選框,我都能夠成功生成包含所有線條的圖表。 我遇到的問題是傳說。 第一個數據集始終與圖例和線條中顯示的點一起出現。 該圖表上的所有其餘數據集都在線顯示了圖例上的線。 要解決此問題,通常我會雙擊圖例,手動取消選中圖例上不想顯示的點,然後復制腳本以使此操作自動發生。 當圖表上有 4 組數據時,在我對圖例框進行更改後,腳本將如下所示:
發送至報告(
派遣(
{},
“400”,
傳奇盒,
{位置( {-1, -3, -3, -3, 0, 1, 2, 3} )}
)
... //(其他 Dispatch() 命令)
)
我還有其他命令轉到圖形,例如軸標籤名稱更改,因此它出現在 SendToReport() 命令中的其他 Dispatch() 命令中。 我遇到的問題是我無法根據所選複選框的數量更改 Postion() 命令內的列表。 我可以對正確的列表進行硬編碼,但該代碼僅適用於該數量的選定複選框。 例如,如果我將列表設置為 {-1, -3, -3, 0, 1, 2},那麼只有當我選中 3 個複選框時,代碼才能正常工作。 我創建了一個變量,該變量根據所選複選框的數量更改為正確的列表(並驗證它是否被正確分配),但是當我將變量放入Position() 函數中時,代碼不會進行我想要的更改到。 下面的代碼根據單擊的複選框數量將正確的列表分配給變量 PL(SUM() 函數內的變量表示複選框的輸出)。
PL = 如果(
總和(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 1, {-1, 0 },
總和(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 2, {-1, -3, 0, 1},
總和(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 3, {-1, -3, -3, 0, 1, 2},
總和(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 4, {-1, -3, -3, -3, 0, 1, 2, 3},
總和(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 5, {-1, -3, -3, -3, -3, 0, 1, 2, 3, 4},
總和(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 6, {-1, -3, -3, -3, -3, -3, 0, 1, 2, 3, 4 , 5},
總和(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 7, {-1, -3, -3, -3, -3, -3, -3, 0, 1, 2, 3, 4, 5, 6},
總和(IW27, II09, II44, II08, II42, IW29, CC23, IW24) == 8, {-1, -3, -3, -3, -3, -3, -3, -3, 0, 1 , 2, 3, 4, 5, 6, 7},
);
我已經驗證此代碼正在將正確的列表分配給變量。 當我按如下方式插入變量時,它不會像我希望的那樣從圖例框中刪除點標籤,並且當我將生成的圖形腳本複製到圖例框時,Dispatch() 命令丟失。
派遣(
{},
“400”,
傳奇盒,
{位置(PL)}
)
我以前以類似的方式使用過變量,但我總是引用列表中的一個數字,而不是嘗試插入整個列表(例如 PL[1])。 我嘗試了很多變體,但到目前為止還沒有奏效(PL[]、{PL}、{PL[]})。
請幫我弄清楚我做錯了什麼。 如果有任何不清楚的地方,請告訴我,我可以提供幫助回答問題所需的更多詳細信息。 在宏偉的計劃中,這是一個非常小的問題,但它讓我發瘋,我很難在沒有找到解決方案的情況下克服它。 幫助!
傑巴克里21
除了伊恩的建議之外。 這是另一種方法。
首先,如果您有一個 IF 語句,我會使用 Choose() 代替。 條件的參數是從 1 開始的整數序列,因此相等子句(expr==1、expr==2、expr==3)是內置的。 (有關更多信息,請參閱 JSL 語法參考)..
話雖如此,這將是您的新條件語句:
PL=選擇(和(IW27、II09、II44、II08、II42、IW29、CC23、IW24)、
{- 1 , 0 }, // 1
{- 1 , - 3 , 0 , 1 }, // 2
{- 1 , - 3 , - 3 , 0 , 1 , 2 }, // 3
{- 1 , - 3 , - 3 , - 3 , 0 , 1 , 2 , 3 }, // 4
{- 1 , - 3 , - 3 , - 3 , - 3 , 0 , 1 , 2 , 3 , 4 }, // 5
{- 1 , - 3 , - 3 , - 3 , - 3 , - 3 , 0 , 1 , 2 , 3 , 4 , 5 }, // 6
{- 1 , - 3 , - 3 , - 3 , - 3 , - 3 , - 3 , 0 , 1 , 2 , 3 , 4 , 5 , 6 }, // 7
{- 1 , - 3 , - 3 , - 3 , - 3 , - 3 , - 3 , - 3 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 }, // 8
) ;
為了在另一個 JSL 語句中使用 PL,就像您嘗試使用 Dispatch() 一樣,參數變量需要包裝在 Expr() 中。 所以,
派遣(
{},
“400”,
傳奇盒,
{位置(表達式( PL) )}
)
這允許您評估(或擴展)PL 的內容,前整個事情都會被評估。 為了使其工作,您必須使用 Eval( Eval Expr ()) 包裝整個圖表函數。 完整的示例如下所示:
dt =打開( “$SAMPLE_DATA/澳大利亞旅遊局.JMP” );
PL = { 0 , - 1 , 1 , - 1 , 2 , - 1 };
//PL = {-1, 0, -1, 1, -1, 2};
評估(
求值表達式(
dt <<圖形生成器(
顯示控制面板( 0 ),
變量(
X(:日期),
是(:姓名( “收入($'000)” ) ),
是(:姓名( “床位使用率(%)” ) ),
是(:姓名( “平均停留時間(天)” ) )
),
元素( 位置( 1 , 1 ), 點( X, Y, 圖例( 4 ) ), 更平滑( X, Y, 圖例( 3 ) ) ),
元素( 位置( 1 , 2 ), 點( X, Y, 圖例( 1 ) ), 更平滑( X, Y, 圖例( 2 ) ) ),
元素( 位置( 1 , 3 ), 點( X, Y, 圖例( 6 ) ), 更平滑( X, Y, 圖例( 5 ) ) ),
發送至報告(
派遣( {}, “圖表標題” , TextEditBox, {設置文本( 《旅遊趨勢》 )} ),
派遣( {}, “400” , 圖例框, {位置(表達式(PL))})
)
)
)
);
希望這可以幫助!