JSL:如何使用組合框和 Next/Prev 按鈕編寫圖形更新腳本大家好,
我正在處理一組更大的 JSL 代碼,並有興趣向其中添加一些功能,以便用戶可以循環瀏覽不同的視圖——就像循環瀏覽 PCA 平台中的不同組件時可以做的事情,請參閱屏幕下面拍攝。

我知道我需要幾個組合框,其中包含數據表中的相關列,但我不確定如何讓圖形像 PCA 平台一樣自動更新,或者如何正確調用 Next 按鈕框。 我還想添加上一個按鈕框,以便用戶可以更輕鬆地退回到視圖中。
如果有人對如何實現這一點有一些建議或想法,我將不勝感激。 我沒有成功搜索此功能,也沒有在我擁有的 Scripting Index 或 Scripting Guide 中找到更多相關信息。
謝謝!,
DS
更新:我越來越接近並且有一個循環通過組合框中的列表的代碼,所以這非常簡單(見下文)。 我仍然遇到的問題是讓圖表自動更新。 意圖是當用戶單擊 Next 或 Prev 時,y 變量在圖中自動更改。 順便說一句,我正在使用 Boston Housing.jmp 文件對其進行測試。
Names Default To Here( 1 );
dt = Data Table( "Boston Housing" );
xlist = dt << Get Column Names( String );
nw = New Window( "interactive Graph builder", V List Box( vlb1 = V List Box(), vlb2 = V List Box() ) );
xcol = 1;
ycol = 2;
lbcontent = V List Box(
Lineup Box( N Col( 5 ),
Text Box( "Select Params", <<SET font="" size=""></SET>
腳本回复:JSL:如何使用組合框和 Next/Prev 按鈕編寫圖形更新腳本嗨,我正在尋找一些進一步的幫助?
我試圖在我的 xlist 上只顯示一定數量的列,而不是所有列,這些列以任意隨機順序放置
xlist= {"crim", "nox", "radial"};
使用上面的腳本,它只繪製前 3 列,在這種情況下是“crim”、“zn”和“indus”,而不是我上面提到的那些。
有什麼解決方法嗎?
謝謝。
回复:JSL:如何使用組合框和 Next/Prev 按鈕編寫圖形更新腳本更新:好的,所以我需要在我的 Scripting Guide 中多閱讀一些關於 Append、Prepend、Sib Append 和 Sib Prepend 的內容。 在閱讀完此內容後,問題是確定我需要將更新的圖形添加到哪個容器框。 因此,當涉及在窗口中包含其他容器框時,您可能需要使用 Sib Prepend() 命令。 現在我看到它是有道理的。
如果有人感興趣,附加的 JSL 會按照我的意圖完成。
謝謝!,
DS
回复:JSL:如何使用組合框和 Next/Prev 按鈕編寫圖形更新腳本你好@ian_jmp ,
當我在新窗口中有更多元素時,我希望您能夠幫助正確地使該腳本正常工作。 我已經能夠將我的獨立運行的概念腳本轉移到一個更大的腳本中,該腳本對數據進行分區並顯示結果。 我將我的 JSL 代碼附加為文件,這樣可能更容易。 它打開 Boston Housing,您可以選擇數據表,然後選擇 X 因子和 Y 響應,並設置驗證部分和要嘗試的最大拆分數。
該代碼可以生成我想要的輸出(如下):

但是,當您循環查看參數時,它會將窗口的佈局重新排列為:

我想保持與第一個屏幕截圖相同的佈局,但 Prepend 和 Append 選項沒有保持正確的佈局。 任何幫助深表感謝。
謝謝!,
DS
回复:JSL:如何使用組合框和 Next/Prev 按鈕編寫圖形更新腳本你好@ian_jmp ,
這正是訣竅,謝謝! 我將在下面發布工作代碼並將其標記為解決方案,因為這段代碼完全符合我開始處理這部分工作時的意圖。
謝謝!,
DS
使用 Prepend 而不是 Append 更新了代碼。
Names Default To Here( 1 );
dt = Open("$sample_data/Boston housing.jmp");
//dt = Data Table( "Boston Housing" );
xlist = dt << Get Column Names( String );
gb_default = Expr(
Graph builder( Show Control Panel( 0 ), Variables( X( Column( dt, 1 ) ), Y( Column( dt, 2 ) ) ), Elements( Points( X, Y, Legend( 3 ) ) ) )
);
gb_change = Expr(
Graph builder( Show Control Panel( 0 ), Variables( X( Column( dt, xcol ) ), Y( Column( dt, ycol ) ) ), Elements( Points( X, Y, Legend( 3 ) ) ) )
);
nw = New Window( "Interactive Graph",
gb = gb_default;
lbcontent = Lineup Box( N Col( 5 ),
Spacer Box( Size( 1, 0 ) ),
Text Box( "X", <<JUSTIFY text=""></JUSTIFY>回复:JSL:如何使用組合框和 Next/Prev 按鈕編寫圖形更新腳本嘗試“前置”而不是“附加”。
回复:JSL:如何使用組合框和 Next/Prev 按鈕編寫圖形更新腳本大家好,
所以,我能夠找到以前的討論線程這裡在哪裡@小姐幫助另一個用戶做類似的事情。 我能夠擺脫這個想法並對其進行修改,以使其或多或少地按照我的意願工作。下面是允許該功能的代碼,除了一個小“缺陷”。
該代碼允許用戶選擇要繪製的 X、Y 項目,並在更改組合框或按下 Prev/Next 按鈕時更新圖形。 因此,在這方面,代碼按預期工作。
在進行更改以繪製不同的內容後,圖形構建器內容框與包含組合框/按鈕框的選擇陣容框交換位置。 我想在窗口底部保留包含用於修改圖形的選項的陣容框,但不知道該怎麼做。
任何關於如何解決這個問題的建議都非常感謝! (代碼在最後)。
謝謝!,
DS
啟動窗口(帶有以下選項):

更改 X 或 Y 組合框或上一個/下一個按鈕後更新的窗口:

這是代碼:
Names Default To Here( 1 );
//dt = open("$sample_data\Boston Housing.jmp");//In case the file isn't already open.<BR />
dt = Data Table( "Boston Housing" );
xlist = dt << Get Column Names( String );
gb_default = Expr(
Graph builder( Show Control Panel( 0 ), Variables( X( Column( dt, 1 ) ), Y( Column( dt, 2 ) ) ), Elements( Points( X, Y, Legend( 3 ) ) ) )
);
gb_change = Expr(
Graph builder( Show Control Panel( 0 ), Variables( X( Column( dt, xcol ) ), Y( Column( dt, ycol ) ) ), Elements( Points( X, Y, Legend( 3 ) ) ) )
);
nw = New Window( "Interactive Graph",
gb = gb_default;
lbcontent = Lineup Box( N Col( 5 ),
Spacer Box( Size( 1, 0 ) ),
Text Box( "X", <<JUSTIFY text=""></JUSTIFY>回复:JSL:如何使用組合框和 Next/Prev 按鈕編寫圖形更新腳本你好@DonMcCormack ,
是的,這肯定可以解決問題,但我希望在用戶單擊 Next/Prev 按鈕或從組合框中選擇不同的變量集時自動更新圖表。 本質上,我正在嘗試重新創建 PCA 平台的功能,但將其推廣到其他腳本中。
DS
回复:JSL:如何使用組合框和 Next/Prev 按鈕編寫圖形更新腳本為什麼不使用列切換器?