<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ciao a tutti,
Ho uno script in cui uno degli output è un grafico bivariato (XY) utilizzando la piattaforma bivariata. Fondamentalmente sta tracciando il valore di un parametro di un dispositivo sull'asse y rispetto al tempo sull'asse x. Queste parti hanno un valore ID comune in una colonna dal datatable di origine.
Ora la piattaforma ha già la funzionalità per cui se si fa clic su un marcatore, la riga su cui si basa il marcatore viene selezionata nella tabella dati (gli altri marcatori nella casella di visualizzazione diventano sbiaditi). Quello che voglio è che quando un utente fa clic su un marcatore, vengano evidenziati anche tutti gli altri marcatori con lo stesso valore ID (in modo che l'utente possa vedere come si è comportato questo dispositivo nel tempo). Sto solo lottando per trovare un modo per farlo. Esiste l'accesso al codice di gestione degli eventi già esistente per la piattaforma (ovvero ciò che consente di selezionare le righe quando l'utente fa clic su un indicatore o più righe quando l'utente fa clic e trascina un rettangolo nella finestra del grafico)?
Qualsiasi aiuto su questo sarebbe molto apprezzato.
Grazie.
Per tua informazione, un altro approccio che utilizza il gestore dello stato della riga:
Nomi predefiniti qui ( 1 ) ;
// Tavolo
dt = Nuova tabella ( "Selezione ID bivariata" ,
Aggiungi righe ( 10 ) ,
Nuova colonna ( "ID" , Numerico , "Nominale" , Formato ( "Migliore" , 12 ) , Imposta valori ( [ 2014 , 2011 , 2012 , 2013 , 2014 , 2011 , 2013 , 2012 , 2011 , 2014 ] ) ) ,
Nuova colonna ( "X" , Numerico , "Continuo" , Formato ( "Migliore" , 12 ) , Imposta valori ( [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] ) ) ,
Nuova colonna ( "Y" , Numerico , "Continuo" , Formato ( "Migliore" , 12 ) , Imposta valori ( [ 20 , 21 , 25 , 28 , 30 , 31 , 33 , 36 , 37 , 40 ] ) ) ,
Imposta colonne di etichette ( : ID )
) ;
// Funzione di gestione dello stato della riga
selezionareID corrispondente = Funzione ( { X } ,
// Ottieni quali righe sono attualmente selezionate
selezionatoRighe = [] ;
io = 1 ;
Per ogni riga (
Se ( Selezionato ( Stato riga () ) ,
selezionatoRighe = V Concat ( selezionatoRighe , io )
) ;
io ++;
) ;
// Se c'è una selezione, la "espande" a tutte le righe richieste
Se ( Riga N ( selezionatoRighe ) > 0 ,
espansoSelectedRows = [] ;
Per ( io = 1 , io <= Riga N ( selezionatoRighe ) , io ++,
questoID = : ID [ selezionatoRighe [ io ]] ;
corrispondentiRighe = dt << getRowsWhere ( : ID == questoID ) ;
espansoSelectedRows = V Concat ( espansoSelectedRows , corrispondentiRighe ) ;
) ;
dt << selectRighe ( espansoSelectedRows ) ;
) ;
) ;
// Assegna il gestore alla tabella
rsh = dt << MakeRowStateHandler ( selezionareID corrispondente ) ;
// Provalo con il Costruttore di grafici
dt << Costruttore di grafici (
Misurare ( 530 , 454 ) ,
Mostra Pannello di controllo ( 0 ) ,
Variabili ( X ( : X ) , Y ( : Y ) ) ,
Elementi ( Punti ( X , Y , Leggenda ( 5 ) ) , Più liscio ( X , Y , Leggenda ( 6 ) ) )
) ;
Ciao a tutti,
Ho trovato un modo per farlo che funzioni. Fondamentalmente, devi solo creare uno script grafico e, al suo interno, scrivere il codice che ottiene gli ID dalle righe selezionate e quindi utilizzare un'istruzione select where per abbinare tutte le righe con quell'ID. Funziona anche se si fa clic e si trascina un numero di punti nella finestra Bivariata. Codice di esempio riportato di seguito.
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) ) );
);
Ciao scwise,
Grazie per questo e non vedo l'ora di avere questa funzionalità quando aggiorno a JMP 12.
Stavo cercando questa funzionalità proprio nella casella di visualizzazione bivariata. Per utilizzare l'esempio riportato sopra, vorrei fare clic su un punto dati per il 2014 e evidenziare tutti i punti del 2014. Spero che ci sia una soluzione di pura sceneggiatura là fuori.
In ogni caso, grazie ancora per la tua risposta.
nkelleh,
Grazie per la domanda sulla possibilità di selezionare qualcosa in un grafico bivariato Adatta X per Y, ma poi vedere tutti i punti corrispondenti evidenziati nella tabella dati che hanno ID simili al punto selezionato.Anche se potrebbe esserci ancora una risposta più elegante di "scripting da zero" a ciò che desideri fare, ho trovato un modo semplice utilizzando la nuova funzionalità Application Builder di JMP 12 che consente di utilizzare un grafico come filtro di dati.Quindi si spera che tu possa utilizzare parti di questo script già pronto nel tuo lavoro attuale, o forse semplicemente essere in grado di utilizzare questa funzionalità pronta all'uso così com'è.Tieni presente che sto utilizzando la versione JMP 12.1 per Mac.
In questo caso abbiamo creato una semplice tabella dati come quella che hai descritto con tre colonne: ID, X e Y, con diversi ID aventi più righe di diverse misurazioni X e Y. Abbiamo quindi combinato il datatable e quindi una distribuzione delle colonne in un'unica finestra (Combina Windows in JMP per ottenere una visualizzazione Report personalizzato) di seguito in modo da poter vedere la nostra configurazione iniziale.

Quindi abbiamo creato un grafico che mostra l'adattamento bivariato di Y per X.A questo punto se selezioni un punto, in realtà stai selezionando solo in base alle coordinate X e Y.Ottenere l'etichetta ID per quel punto da visualizzare non è un problema, ma ciò non farà altro che ombreggiare (selezionare) quel punto esatto nella tabella dati.Quindi il problema è che la Bivariata cercherebbe corrispondenze basate solo su coordinate X e Y simili e non su ID comuni.Vedi la successiva visualizzazione del rapporto personalizzato.
Quindi ho pensato che forse avremmo potuto rendere questo processo in due fasi davvero semplice creando un grafico "di aiuto" accanto alla Bivariata che mi avrebbe permesso di selezionare tutti i punti di interesse ID con un clic.Per fare ciò ho creato una distribuzione per ID (che ho trasformato in un tipo di colonna di dati nominale per una migliore capacità di selezione) e quindi ho disattivato tutte le opzioni di visualizzazione tranne un grafico a mosaico.Quindi unisci i grafici Distribuzione e Bivariato in un'unica finestra per ottenere un'altra visualizzazione del rapporto personalizzato.Quindi, sotto il triangolo rosso nell'intestazione del report, abbiamo selezionato il pulsante Modifica applicazione che visualizza l'area di lavoro del generatore di applicazioni (dopo aver selezionato la tabella dati sottostante).Ora nell'Application Builder è facile come selezionare il primo grafico del grafico a mosaico di distribuzione, fare clic con il tasto destro su di esso e selezionare Usa come filtro.Ora posso avere una soluzione con due clic... dove prima seleziono il punto sul grafico Adattamento bivariato Y per X che mi interessa, quindi posso scorrere e selezionare (fare clic sulla direzione su) l'ID completo nel Mosaico parzialmente ombreggiato che ora evidenzierà tutti gli ID simili nella tabella dati.Bello anche vedere graficamente sul grafico Bivariate Fit Y By X tutti i punti corrispondenti allo stesso numero ID dopo averlo selezionato sul Mosaic Plot.


Ora puoi andare al triangolo rosso sotto l'intestazione Report e salvare lo script in una finestra di script per vedere il lavoro di scripting sottostante che è stato generato per te durante la creazione di questa visualizzazione.Anche in questo caso, anche se non è così semplice come poterlo fare direttamente da Bivariate Fit Y By X, mostra una soluzione pronta all'uso e ti dà un modo per generare automaticamente alcuni script.Verrà allegato a questo file di lavoro JMP con gli script salvati affinché tu possa verificarli.
Spero che questo ti aiuti!