Ho un caso d'uso per costruire un grafico che avrà una capacità di drill-down.
L'utente farà clic su un punto del grafico e, utilizzando la funzione Mousetrap(), verrà eseguito uno script che farà apparire una nuova finestra contenente un altro grafico con alcune informazioni di drill down più dettagliate.
Voglio quindi supportare un ulteriore livello di drill-down da questa prima finestra pop-up.
Illustrerò con un semplice esempio utilizzando il set di dati BigClass nello script allegato.
Le note nello script evidenziano il problema: con una sola chiamata alla funzione mouse-trap(), il primo drill down funziona.
Ma se aggiungo una seconda trappola per topi, specificatamente aggiungendola al grafico che risulterà dal primo drill-down, ciò che accade invece è che la seconda azione di drill-down viene applicata al primo clic del mouse, che non era previsto .
Non sei sicuro che sia possibile utilizzare MouseTrap() in questo modo o no?
d
@Mark_Bailey grazie per il riferimento ai graphlets!
@tsl quindi vuoi eseguire il drill-down su più livelli. Molto bello, questo è un ottimo modo per conoscere i tuoi dati utilizzando la visualizzazione dei dati stessa per restringere la tua attenzione.
Contiamo i modi in cui puoi farlo in JMP15 utilizzando i graphlet. Questa nuova funzionalità segue un'architettura "porcellana + idraulica", il che significa che ci sono modi predefiniti e facili da usare per eseguire comportamenti standard, costruiti su un'API di programmazione (JSL) a cui puoi anche accedere per implementare casi personalizzati. Lo scenario che hai descritto può essere implementato utilizzando due diversi approcci "porcellana" o punta e clicca.
Se ti concentri su una misura particolare, singola, ad esempio l'altezza, puoi utilizzare un preset Graphlet come Istogramma. Dopo aver creato il grafico di riferimento, fai clic con il pulsante destro del mouse sullo sfondo del grafico per accedere al nuovo menu "Hover Label". Da lì vedrai le opzioni preimpostate

Un preset graphlet creerà un graphlet del tipo di visualizzazione indicato, derivando la mappatura dei ruoli dalle variabili selezionate nel grafico di base. Poiché il grafico della linea di base mostra i conteggi delle variabili di altezza, l'impostazione predefinita del grafico dell'istogramma mostrerà automaticamente la distribuzione di quella variabile per ogni data barra.Ma ogni barra filtra già fino a un singolo valore di altezza, quindi non è una distribuzione interessante. Diciamo che la nostra linea di base era invece un istogramma; un preset dell'istogramma mostrerebbe la distribuzione dei valori su ogni bin:

Nota come la miniatura dell'etichetta al passaggio del mouse si comporta come un'anteprima del grafico. Se vai avanti e fai clic sull'immagine in miniatura, verrà avviato il grafico equivalente in una nuova finestra. Questo nuovo grafico viene filtrato per includere solo le righe corrispondenti all'elemento visivo al passaggio del mouse (in questo caso, il bin 60-62), implementando l'operazione di drill-down. L'operazione di filtro viene implementata utilizzando un filtro dati locale compresso, rendendolo resiliente alle modifiche di selezione non correlate e consentendo un'ulteriore esplorazione attraverso le modifiche alle impostazioni del filtro.

Un'altra caratteristica dei preset Graphlet è che sono preconfigurati per essere ricorsivi, al fine di supportare scenari avanzati di drill-down. Quindi puoi andare avanti e interagire con i raccoglitori nel nuovo istogramma. Vedrai che puoi anche eseguire il drill-down su di essi:

Ora l'esempio .jsl allegato alla pagina presentava uno scenario di drill-down più complesso, in cui i tipi di visualizzazione e le assegnazioni di ruolo venivano scelti in base a valori specifici a ogni livello di drill-down:
* Livello 0 (linea di base): conta il valore dell'altezza
* Livello 1: box plot del peso per sesso
* Livello 2: dettagli riga visualizzati sul registro
Questo livello di personalizzazione può ancora essere raggiunto utilizzando un diverso tipo di "porcellana": il comando Incolla Graphlet. Questo comando consente all'utente di "impilare" le definizioni del graphlet, che verranno utilizzate mentre l'utente approfondisce gli elementi visivi a ogni livello.
Quindi, dopo aver creato il grafico di base, procedi e crea grafici che rappresentano ciascuno dei livelli di drill-down desiderati. Non preoccuparti del filtraggio: come nel caso precedente, verrà eseguito automaticamente. Quindi - a partire dal Ultimo level - copia il suo script negli appunti:

Quindi passare al grafico precedente e quindi incollare (lo script come) graphlet:

Nelle immagini sopra, abbiamo incollato il grafico drill-down di livello 1 (il grafico del peso per sesso) nel grafico di base. Il risultato:

Poiché questo scenario è stato definito, non era necessario un paste graphlet di livello 2. La visualizzazione dei valori di riga per l'elemento visivo al passaggio del mouse è già il comportamento predefinito per le etichette al passaggio del mouse. Ecco cosa vedremmo in un drill-down di secondo livello, dopo aver passato il mouse sopra il secondo box plot:

Facendo clic con il pulsante destro del mouse sull'etichetta al passaggio del mouse, l'utente può copiarne il contenuto, sottoimpostare i dati o modificare ulteriormente la configurazione dell'etichetta al passaggio del mouse.
Spero che questo sia stato utile. Per un esempio di drill-down categorico, controlla la risposta a https://community.jmp.com/t5/Discussions/drill-down-in-a-graph-hierarchy/mp/11702
Ulteriori informazioni sulle personalizzazioni delle etichette al passaggio del mouse sono disponibili all'indirizzo: https://www.jmp.com/support/help/en/15.0/index.shtml#page/jmp/add-hover-graphs.shtml#
Le informazioni sui graphlet sono specificatamente su: https://www.jmp.com/support/help/en/15.0/index.shtml#page/jmp/add-graphs-or-images-to-hover-labels.s...
Bella idea! Sposta il tuo codice in una funzione e funziona:
makesubset = Function( {_x},
{TestWin}, // local variables
dt << select where( :height == _x );
TestWin = New Window( "Drill Down Window",
dt << GraphBuilder( Size( 534, 448 ), Show Control Panel( 0 ),
Where( Selected() ), Variables( X( :sex ), Y( :weight ) ),
Elements( Points( X, Y, Legend( 4 ) ), Box Plot( X, Y, Legend( 5 ) ) )
)
);
TestWin[FrameBox( 1 )] << add graphics script(
Mousetrap(
_x2 = Round( X, 0 );
Show( _x2 );
)
);
);
dt = Open( "$sample_data/big class.jmp" );
dt << Graph Builder( Size( 527, 454 ), Show Control Panel( 0 ),
Variables( X( :height ) ), Elements( Bar( X, Legend( 6 ) ) ),
SendToReport( Dispatch( {}, "Graph Builder", FrameBox,
{Add Graphics Script( 2, Description( "Script" ),
Mousetrap(
_x = Round( X, 0 );
makesubset( _x );
)
), Grid Line Order( 1 ), Reference Line Order( 3 )}
)
)
);Si comporta come descrivi perché la funzione Mousetrap non viene realmente eseguita come le altre funzioni. Il metodo <
Sospetto che mantenga l'ultimo. La scansione non seguirà la chiamata di funzione e la chiamata di funzione potrebbe rendere il tuo JSL più facile da leggere e mantenere.
@EvanMcCorkle Sì, sembra strano che trovi una trappola per topi all'interno di una trappola per topi.
JMP 15 ha introdotto le "etichette al passaggio del mouse" proprio per questo scopo. Ci sono tre aspetti che lavorano insieme: graphlet, textlet e gridlet.
Consultare Guida > Libreria della documentazione di JMP > Guida agli script > Capitolo 9: Rapporti JMP, pagina 512. Ci sono molte spiegazioni ed esempi per imparare come implementare i comportamenti di drill-down.