<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 <<取得行位置( : ID ==這個ID ) ;
展開選定行= V連接(展開選定行,匹配行) ;
) ;
dt <<選擇行(展開選定行) ;
) ;
) ;
// 將處理程序分配給表
rsh = dt << MakeRowStateHandler (選擇匹配ID ) ;
// 使用圖形產生器嘗試一下
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) ) );
);
嗨,斯威斯,
感謝您的支持,並期待在升級到 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 開發器中,只需選擇第一個分佈馬賽克圖,右鍵單擊它並選擇用作過濾器。現在我可以有一個雙擊解決方案...首先我選擇我關心的雙變量來擬合 Y By X 圖表上的點,然後可以滑動並選擇(單擊方向)部分陰影馬賽克中的完整 ID現在將突出顯示數據表中所有相似的ID。在馬賽克圖上選擇相同 ID 號碼後,我們也可以在雙變數 Y By X 圖表上以圖形方式看到與相同 ID 號碼相對應的所有點。


現在,您可以轉到報告標題下的紅色三角形,並將腳本儲存到腳本窗口,以查看在建立此視圖時為您產生的基礎腳本工作。同樣,雖然這不像直接從“雙變量擬合 Y × X”那樣靈活,但它確實顯示了一個開箱即用的解決方案,並為您提供了一種自動生成一些腳本的方法。將附在該 JMP 工作文件中,其中包含已儲存的腳本,供您查看。
希望這可以幫助!