<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />大家好,
我有一個腳本,其中一個輸出是使用雙變量平台的雙變量 (XY) 圖。 它基本上是在 y 軸上繪製設備參數的值,在 x 軸上繪製時間。 這些部分在源數據表的列中具有共同的 ID 值。
現在該平台已經具有這樣的功能,如果您單擊一個標記,則在數據表中選擇該標記所基於的行(顯示框中的其他標記會變淡)。 我想要的是,當用戶單擊一個標記時,具有相同 ID 值的所有其他標記也會突出顯示(因此用戶可以看到這台設備隨著時間的推移如何表現)。 我只是在努力尋找一種方法來做到這一點。 是否可以訪問平台已經存在的事件處理代碼(即當用戶單擊標記時允許選擇行,或者當用戶單擊並拖動繪圖窗口中的矩形時允許選擇多行)?
對此的任何幫助將不勝感激。
謝謝。
僅供參考,另一種使用行狀態處理程序的方法:
名稱默認到這裡( 1 ) ;
// 桌子
dt =新表( “二元ID選擇” ,
添加行( 10 ) ,
新列( “ID” ,數字, “名義” ,格式( “最好的” , 12 ) ,設定值( [ 2014 , 2011 , 2012 , 2013 , 2014 , 2011 , 2013 , 2012 , 2011 , 2014 ] ) ) ,
新列( “X” ,數字, “連續的” ,格式( “最好的” , 12 ) ,設定值( [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] ) ) ,
新列( “是” ,數字, “連續的” ,格式( “最好的” , 12 ) ,設定值( [ 20 , 21 , 25 , 28 , 30 , 31 , 33 , 36 , 37 , 40 ] ) ) ,
設置標籤列( : ID )
) ;
// 行狀態處理函數
選擇匹配ID =功能( { X } ,
// 獲取當前選中了哪些行
選定的行= [] ;
一世= 1 ;
對於每一行(
如果(已選中(行狀態() ) ,
選定的行= V 康卡特(選定的行,一世)
) ;
一世++;
) ;
// 如果有選擇,則將其“擴展”到所有需要的行
如果( N 行(選定的行) > 0 ,
展開選定行= [] ;
為了(一世= 1 ,一世<= N 行(選定的行) ,一世++,
這個ID = : ID [選定的行[一世]] ;
匹配行= dt << getRowsWhere ( : ID ==這個ID ) ;
展開選定行= V 康卡特(展開選定行,匹配行) ;
) ;
dt <<選擇行(展開選定行) ;
) ;
) ;
// 將處理程序分配給表
rsh = dt << MakeRowStateHandler (選擇匹配ID ) ;
// 用 Graph Builder 試試
dt <<圖形生成器(
尺寸( 530 , 454 ) ,
顯示控制面板( 0 ) ,
變量( X ( : X ) ,是( :是) ) ,
元素(積分( X ,是,傳奇( 5 ) ) ,更平滑( X ,是,傳奇( 6 ) ) )
) ;
大家好,
我找到了一種可行的方法。 基本上,您只需要創建一個圖形腳本,並在其中編寫從選定行獲取 ID 的代碼,然後使用 select where 語句來匹配具有該 ID 的所有行。 如果您單擊並拖動“雙變量”窗口中的多個點,這也有效。 下面的示例代碼。
xParam ="Column Name 1 Here";
yParam = "Column Name 2 Here";
idParam = "Column Name 3 Here";
//tableRef = data table reference
bivPlatform = Bivariate(
Y( Eval(yParam) ),
X( Eval(xParam) ),
);
bivReport = bivPlatform << Report;
bivFrame = bivRawReport[FrameBox( 1 )]; //Assign reference to framebox
// Add Graphics script to select all rows with matching ID when one row is selected on the graph
bivFrame << Add Graphics Script( 2, //Order graphics script is run with respect to other elements in Frame box (Not really needed here)
//Get selected IDs
selectedIDMatrix = tableRef:idParam[ ( tableRef << Get Selected Rows() ) ];
//Get unique IDs (optional I guess)
idArray = Associative Array(selectedIDMatrix);
uniqueIDMatrix = idArray << Get Keys;
//Select other datapoints with matching IDs
tableRef << Select Where( Contains( As List(uniqueIDMatrix), As Column(tableRef, idParam) ) );
);
嗨,Scwise,
感謝這一點,並期待在我升級到 JMP 12 時擁有此功能。
我有點想在雙變量顯示框中尋找這個功能。 要使用上面的示例,我想單擊 2014 年的數據點,並突出顯示所有 2014 年的點。 我希望那裡有一個純腳本解決方案。
無論如何,再次感謝您的回复。
恩凱萊,
感謝您提出有關能夠在 Fit X By Y Bivariate Graph 中選擇某些內容的問題,但隨後將所有對應點返回到突出顯示的數據表中,這些點與所選點具有相似的 ID。雖然您想要做的事情可能仍然有一個更優雅的“從頭開始編寫腳本”的答案,但我找到了一種使用新 JMP 12 應用程序生成器功能的簡單方法,該功能允許將圖形用作數據過濾器。然後希望您可以在您當前的工作中使用這個現成腳本的一部分,或者也許只是能夠使用這個開箱即用的功能。請注意,我使用的是適用於 Mac 的 JMP 12.1 版本。
在這種情況下,我們創建了一個簡單的數據表,就像您描述的那樣,包含三列:ID、X 和 Y,其中幾個 ID 具有多行不同的 X 和 Y 測量值。 然後,我們將數據表和列的分佈組合到一個窗口中(在 JMP 中組合窗口以獲得自定義報告視圖),以便您可以看到我們的初始設置。

然後我們創建了一個圖表,顯示 Y 與 X 的二元擬合。此時如果您選擇一個點,您實際上只是基於 X 和 Y 坐標進行選擇。讓該點的 ID 標籤顯示出來是沒有問題的,但這只會將那個確切的點隱藏(選擇)回您的數據表中。所以問題是雙變量將僅根據相似的 X 和 Y 坐標而不是常見的 ID 來尋找匹配項。請參閱下一個自定義報告視圖。
所以想也許我們可以通過在雙變量旁邊創建一個“幫助”圖來使這成為一個非常簡單的兩步過程,這樣我就可以一鍵選擇所有感興趣的 ID 點。為此,我創建了一個 ID 分佈(為了更好的選擇能力,我將其製成名義數據列類型),然後關閉除馬賽克圖之外的所有顯示選項。然後將分佈圖和雙變量圖合併到一個窗口中,以獲得另一個自定義報告視圖。然後在報告標題中的紅色三角形下,我們選擇了編輯應用程序按鈕,該按鈕會打開應用程序生成器工作區(在選擇基礎數據表之後)。現在在 App 開發器中,只需選擇第一個分佈馬賽克圖,右鍵單擊它並選擇用作過濾器即可。現在我可以有一個兩次單擊的解決方案...首先我在 Bivariate Fit Y By X 圖表上選擇我關心的點,然後可以滑動並選擇(單擊方向)部分陰影馬賽克中的完整 ID現在將突出顯示數據表上的所有相似 ID。在我們在馬賽克圖上選擇它之後,還可以在 Bivariate Fit Y By X 圖表上以圖形方式查看與相同 ID 號相對應的所有點。


現在您可以轉到報告標題下的紅色三角形並將腳本保存到腳本窗口,以查看在創建此視圖時為您生成的底層腳本工作。同樣,雖然這不像直接從 Bivariate Fit Y By X 中那樣巧妙,但它確實顯示了一個開箱即用的解決方案,並為您提供了一種自動生成一些腳本的方法。將在此 JMP 工作文件中附加已保存的腳本供您檢出。
希望這可以幫助!