<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ciao a tutti,
Ho uno script in cui uno degli output è un grafico bi-variato (XY) che utilizza la piattaforma bi-variata. 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 marker, la riga su cui si basa il marker viene selezionata nel datatable (gli altri marker nella casella di visualizzazione diventano sbiaditi). Quello che voglio è che quando un utente fa clic su un marker, anche tutti gli altri marker con lo stesso valore ID vengano evidenziati (quindi l'utente può vedere come si è comportato questo dispositivo nel tempo). Sto solo lottando per trovare un modo per farlo. È possibile accedere al codice di gestione degli eventi già esistente per la piattaforma (ovvero cosa consente di selezionare le righe quando l'utente fa clic su un marker, o più righe quando l'utente fa clic e trascina un rettangolo nella finestra del grafico)?
Qualsiasi aiuto su questo sarebbe molto apprezzato.
Grazie.
Cordiali saluti, un altro approccio che utilizza il gestore dello stato della riga:
Nomi predefiniti qui ( 1 ) ;
// Tavolo
dt = Nuova tavola ( "Selezione ID bivariata" ,
Aggiungi righe ( 10 ) ,
Nuova colonna ( "ID" , Numerico , "Nominale" , Formato ( "Migliore" , 12 ) , Imposta i valori ( [ 2014 , 2011 , 2012 , 2013 , 2014 , 2011 , 2013 , 2012 , 2011 , 2014 ] ) ) ,
Nuova colonna ( "X" , Numerico , "Continuo" , Formato ( "Migliore" , 12 ) , Imposta i valori ( [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] ) ) ,
Nuova colonna ( "Y" , Numerico , "Continuo" , Formato ( "Migliore" , 12 ) , Imposta i valori ( [ 20 , 21 , 25 , 28 , 30 , 31 , 33 , 36 , 37 , 40 ] ) ) ,
Imposta colonne etichetta ( : ID )
) ;
// Funzione di gestione dello stato della riga
seleziona MatchingID = Funzione ( { X } ,
// Ottieni quali righe sono attualmente selezionate
righe selezionate = [] ;
io = 1 ;
Per ogni riga (
Se ( Selezionato ( Stato di riga () ) ,
righe selezionate = V Concat ( righe selezionate , io )
) ;
io ++;
) ;
// Se è presente una selezione, 'espandila' a tutte le righe richieste
Se ( Riga N ( righe selezionate ) > 0 ,
righe selezionate espanse = [] ;
Per ( io = 1 , io <= Riga N ( righe selezionate ) , io ++,
questo ID = : ID [ righe selezionate [ io ]] ;
righe corrispondenti = dt << getRowsWhere ( : ID == questo ID ) ;
righe selezionate espanse = V Concat ( righe selezionate espanse , righe corrispondenti ) ;
) ;
dt << seleziona Righe ( righe selezionate espanse ) ;
) ;
) ;
// Assegna il gestore alla tabella
rsh = dt << MakeRowStateHandler ( seleziona MatchingID ) ;
// Provalo con Graph Builder
dt << Generatore di grafici (
Dimensione ( 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 funziona. Fondamentalmente, devi solo creare uno script grafico e lì, 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 fai clic e trascini un certo numero di punti nella finestra Bivariate. Codice di esempio 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 capacità quando avrò l'aggiornamento a JMP 12.
Stavo cercando questa funzionalità solo all'interno della casella di visualizzazione bivariata. Per usare il tuo esempio sopra, vorrei fare clic su un punto dati per il 2014 e avere tutti i punti 2014 evidenziati. Spero che ci sia una soluzione di puro script là fuori.
In ogni caso grazie ancora per la risposta.
nkelleh,
Grazie per la domanda sulla possibilità di selezionare qualcosa in un grafico bivariato Fit X By Y, ma poi vedere tutti i punti corrispondenti alla tabella dati evidenziata che hanno ID simili al punto selezionato.Anche se potrebbe esserci ancora una risposta più elegante "scripting da zero" a ciò che vuoi fare, ho trovato un modo semplice utilizzando la nuova funzione JMP 12 Application Builder che consente di utilizzare un grafico come filtro 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'è.Nota che sto usando la versione JMP 12.1 per Mac.
In questo caso abbiamo creato una semplice tabella di dati come quella che hai descritto con tre colonne: ID, X e Y, con diversi ID aventi più righe di diverse misure X e Y. Abbiamo quindi combinato il datatable e quindi una distribuzione delle colonne in una 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 non è un problema, ma questo farà solo ombreggiare (selezionare) quel punto esatto nella tabella dei dati.Quindi il problema è che il Bivariato cercherebbe corrispondenze basate solo su coordinate X e Y simili e non ID comuni.Vedere la successiva visualizzazione del rapporto personalizzato.
Quindi ho pensato che forse avremmo potuto renderlo un processo in due passaggi davvero semplice creando un grafico "helper" accanto al Bivariate che mi avrebbe permesso di selezionare tutti i punti ID di interesse 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 ad eccezione di un diagramma a mosaico.Quindi unisci i grafici di distribuzione e bivariata 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 fa apparire l'area di lavoro di Application Builder (dopo aver selezionato la tabella dati sottostante).Ora nell'Application Builder è facile come selezionare il primo grafico Distribution Mosaic Plot, fare clic con il tasto destro su di esso e selezionare Usa come filtro.Ora posso avere una soluzione in due clic... dove prima seleziono il punto del grafico Bivariate Fit Y By X che mi interessa, quindi posso scorrere e selezionare (fare clic sulla direzione) l'ID completo nel Mosaico parzialmente ombreggiato che ora evidenzierà tutti gli ID simili sulla 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 vista.Anche se questo non è così fluido come essere in grado di farlo direttamente da Bivariate Fit Y By X, mostra una soluzione pronta all'uso e ti dà un modo per generare automaticamente alcuni degli script.Allegherà in questo file di lavoro JMP con gli script salvati anche per il check-out.
Spero che sia di aiuto!