Costruttore di grafici: nascondi X categorie senza datiCiao a tutti,
Ho una tabella con una colonna di raggruppamento e diverse variabili di risposta.
New Table( "Test",
Add Rows( 7 ),
New Column( "GROUP",
Character,
"Nominal",
Set Values( {"a", "b", "c", "d", "e", "f", "g"} )
),
New Column( "Y",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [7, ., 6, ., 4, ., 2] )
),
New Column( "Y 2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [7, 6, 2, 3, ., ., .] ),
Set Display Width( 49 )
)
)Vorrei creare un grafico a barre con un commutatore di colonne.
Graph Builder(
Size( 527, 448 ),
Show Control Panel( 0 ),
Variables(
X( :GROUP, Order By( :Y, Ascending, Order Statistic( "Mean" ) ) ),
Y( :Y )
),
Elements( Bar( X, Y, Legend( 4 ) ) ),
Column Switcher( :Y, {:Y, :Y 2} )
)Il mio problema è che non voglio visualizzare i livelli senza dati. In altre parole, non voglio vedere i livelli "b", "d" e "f" per Y e i livelli "e", "f", "g" per Y2.

Ho provato a utilizzare una clausola "dove" ma sfortunatamente non viene presa in considerazione dal commutatore di colonne.
Hai qualche idea di come potremmo farlo?
Grazie in anticipo!
Ri: Costruttore di grafici: nascondi X categorie senza datiCIAO @geoffrey_mann ,
Grazie per il tuo coinvolgimento e per le informazioni aggiuntive.
Inizierò a pubblicizzare la funzionalità ai miei colleghi per ottenere voti! 
Per quanto riguarda lo script, preferisco non influenzare la tabella corrente, quindi penso che il filtro dati locale sia una buona opzione! Esplorerò questa possibilità più in profondità.
Ri: Costruttore di grafici: nascondi X categorie senza datiCIAO @anne_sa
Sono così felice che questo abbia aiutato. È qualcosa che volevo fare da un po' e tu mi hai dato la motivazione. 
Inoltre, sono d'accordo con te e @vince_faller che un ascoltatore o un modo per personalizzare il comportamento attorno al commutatore di colonna sarebbe generalmente utile a coloro che programmano i propri componenti aggiuntivi o modificano il comportamento. Lo facciamo continuamente in JMP Clinical e JMP Genomics, motivo per cui ne ho dato credito @kelci_miclaus E @drewfoglia per il codice che ho preso in prestito.
Se solo conoscessimo un product manager JMP che potrebbe aiutarci a realizzare tutto ciò.
Per favore votate entrambi per la funzione e aiuterà con la giustificazione.
Per quanto riguarda le modifiche finali, dovresti avere il controllo nel codice wrapper che hai scritto. Le chiamate API hanno semplicemente lo scopo di sostituire le variabili X e Y. Continuerò ad aggiungere a queste funzioni per aiutare i programmatori a semplificare il confezionamento di GraphBuilder in modo che possano creare componenti aggiuntivi più velocemente. Quello che sto cercando di dire qui è solo aggiungere funzioni per aggiornare GraphBuilder nel file API in modo che qualsiasi file "driver" che usi abbia il comportamento di selezione. Nota che avrei potuto inserire dt << clearrowstates(); chiamata sotto le chiamate replaceGB... per organizzare la modifica degli stati delle righe nella tabella in un unico posto. Tieni inoltre presente che questo codice modifica gli stati delle righe della tabella dati principale invece di utilizzare un filtro locale per modificare il report GraphBuilder. Potresti voler cambiare il tuo approccio se desideri più report della tabella dati. Ma queste sono solo note e intese come informazioni aggiuntive per le future app che potresti creare con JMP.
Nota gli stati clearrow nel file del driver:
dt << clearrowstates();
newvarname = lb<<GETSELECTED></GETSELECTED>
In base alla mia comprensione "semplicistica" di ciò che stai cercando di fare, ti consiglio semplicemente di sostituire dt << clearrowstates(); con dt << non escludere (); Fammi sapere se questo è il comportamento che preferisci o se è più complesso di così.
Ri: Costruttore di grafici: nascondi X categorie senza datiSono totalmente d'accordo con te @vince_faller , sarebbe una funzionalità molto carina 
Penso che lo aggiungerò alla lista dei desideri di JMP!
Ri: Costruttore di grafici: nascondi X categorie senza datiGrazie mille per questi script @geoffrey_mann
È decisamente più pulito di quello che ho fatto io!
C'è solo una cosa che vorrei adattare: ogni volta che selezioniamo una nuova variabile nella casella di riepilogo, lo stato della riga viene ripristinato. Quindi se alcuni punti sono stati etichettati/esclusi/colorati... perderemo questa informazione e può essere fastidioso.
Per il resto corrisponde alle mie aspettative, quindi grazie ancora!
Ri: Costruttore di grafici: nascondi X categorie senza datiSarebbe bello se l'interruttore di colonna avesse un messaggio <Ri: Costruttore di grafici: nascondi X categorie senza dati
Ciao di nuovo @anne_sa ,
Scusate il ritardo, in realtà ho preso l'influenza per qualche giorno e sono rimasto un po' indietro.
Ho allegato due file. Il primo file jsl (Esempio di script per la modifica della riga states.jsl) è il file del driver e il percorso nella seconda riga è il percorso completo della posizione in cui inserisci il secondo file (GraphBuilderJSLAPI.jsl).
//Include script to modify GraphBuilder with some special functions defined
include(ConvertFilePath("/Users/gemann/Projects/Prototypes/JSLClasses/GraphBuilderJSLAPI.jsl", absolute, windows));
//Create a sample table
dt = New Table( "Test",
Add Rows( 7 ),
New Column( "GROUP",
Character,
"Nominal",
Set Values( {"a", "b", "c", "d", "e", "f", "g"} )
),
New Column( "Y",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [7, ., 6, ., 4, ., 2] )
),
New Column( "Y 2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [7, 6, 2, 3, ., ., .] ),
Set Display Width( 49 )
)
);
//Add a new window and build a listbox beside a graphbuilder
New Window( "CustomColumnSwitcher Window",
//Start by getting all of the columns in the current datatable
CNames = dt << Get Column Names( Numeric );
Show( CNames );
//User a horizontal layout
HListBox(
//Use a ListBox as the new Column Switcher
lb = List Box(
CNames,
maxSelected(1),
//The next lines specify the script that gets run when an item in listbox is selected
dt << clearrowstates();
newvarname = lb<<GETSELECTED></GETSELECTED>
Buona fortuna e fammi sapere se hai problemi. Naturalmente questi file non sono completamente testati!!! 
Ri: Costruttore di grafici: nascondi X categorie senza datiCIAO @geoffrey_mann ,
Ho scritto qualcosa per aggiornare sostanzialmente il commutatore di colonna e modificare l'impostazione dell'asse (come suggerito da @giuliano ) ogni volta che selezioniamo una nuova variabile. Tuttavia potrebbe non essere molto efficiente, quindi ovviamente sono molto interessato alla tua soluzione!
Ri: Costruttore di grafici: nascondi X categorie senza datiCiao Anna,
Volevo ricontattarti per vedere se hai trovato una soluzione di codifica al tuo problema. Mi ci è voluto un po' per trovare il tempo, ma ho una soluzione di codifica se ne hai ancora bisogno.
Ri: Costruttore di grafici: nascondi X categorie senza datiCIAO @giuliano !
Apprezzo davvero i tuoi sforzi per risolvere il mio problema! Sfortunatamente, il numero di livelli non mancanti può variare da una variabile di risposta a quella successiva. Tuttavia, il tuo ultimo post può sicuramente essere utilizzato per la “soluzione di codifica”. Modificare le impostazioni dell'asse in base al numero del livello è davvero un bel modo per visualizzare ciò che ci si aspetta. Lavorerò in quella direzione. Grazie per l'aiuto!
Ri: Costruttore di grafici: nascondi X categorie senza datiCIAO @anne_sa ,
Capisco cosa intendi. Potrebbe davvero trattarsi di codificare qualcosa di personalizzato, ma lasciami fare un altro tentativo interattivo. Ci sono sempre solo quattro livelli (anche se diversi) di Gruppo per ogni Y? Se è così, ecco un potenziale trucco: il Costruttore di grafici manterrà l'asse X al cambio di colonna e poiché i livelli sono ordinati in modo crescente (quindi i livelli vuoti sono sempre alla fine), potremmo regolare l'asse in modo che vengano visualizzati solo quattro livelli . Puoi farlo nelle impostazioni dell'asse (fai clic con il pulsante destro del mouse sull'asse > impostazioni dell'asse) o semplicemente trascinando la fine dell'asse finché i livelli mancanti non vengono nascosti).
Graph Builder(
Show Control Panel( 0 ),
Variables( X( :GROUP, Order By( :Y, Ascending, Order Statistic( "Mean" ) ) ), Y( :Y ) ),
Elements( Bar( X, Y, Legend( 4 ) ) ),
Column Switcher( :Y, {:Y, :Y 2} ),
SendToReport( Dispatch( {}, "GROUP", ScaleBox, {Min( -0.5 ), Max( 3.5 ), Inc( 1 ), Minor Ticks( 0 )} ) )
);

Forse una potenziale soluzione nel tuo caso?
@giuliano
Ri: Costruttore di grafici: nascondi X categorie senza datiGrazie @giuliano per questo suggerimento! Infatti permette di visualizzare solo i livelli con dati.
L'unico problema (ma forse chiedo troppo) è che perdiamo il collegamento tra le righe. Ad esempio, se seleziono il livello "a" per Y e voglio vedere il valore corrispondente per Y2, non viene evidenziato nulla quando seleziono Y2 con il filtro dati locale.
Forse codificare il comportamento previsto è la soluzione...
Ri: Costruttore di grafici: nascondi X categorie senza datiCIAO @anne_sa ,
Come hai scoperto, il Costruttore di grafici osserva quelle categorie della variabile di raggruppamento e insisterà davvero nel tracciarle (il che di solito è una buona cosa) poiché presuppone che tu trovi valore in esse poiché le hai mantenute nella tabella. Nel tuo caso con il commutatore di colonne, non è così semplice come eliminare semplicemente quelle righe poiché esistono dati per le altre colonne. Una soluzione è ristrutturare i dati in modo che le righe mancanti possano essere eliminate. Lo farei impilando:
Tabelle > Impila
Data Table( "Test" ) << Stack(
columns( :Y, :Y 2 ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
Ciò restituirà una tabella come quella seguente:

Rimuovi i valori mancanti facendo clic con il pulsante destro del mouse su una delle celle mancanti > seleziona la corrispondenza. Quindi, elimina quelle righe. Ciò restituisce la tabella allegata. Ora crea il tuo grafico ma utilizza un filtro dati locale anziché un commutatore di colonne per selezionare quella che in precedenza era una risposta dalla colonna Etichetta:
Graph Builder(
Show Control Panel( 0 ),
Variables( X( :GROUP ), Y( :Data ) ),
Elements( Bar( X, Y, Legend( 4 ) ) ),
Local Data Filter(
Add Filter(
columns( :Label ),
Where( :Label == "Y" ),
Display( :Label, Size( 160, 17 ) )
)
)
);

Poiché non ci sono righe mancanti, il Costruttore di grafici visualizza solo i livelli del gruppo popolati con dati.Ovviamente puoi generalizzare questo a qualsiasi numero di livelli di Y: semplicemente impilarli tutti nel passaggio iniziale.
Spero che aiuti!
@giuliano
Ri: Costruttore di grafici: nascondi X categorie senza datiCiao Anna,
Adesso vedo il tuo problema e lo sto ancora esaminando. Credo che questo richiederà un po' di codifica.Ri: Costruttore di grafici: nascondi X categorie senza datiGrazie per la tua risposta @geoffrey_mann
Sfortunatamente non è esattamente quello che vorrei ottenere perché quando seleziono una nuova colonna con il commutatore di colonne, il filtro dei dati locali è ancora basato su Y.
Ovviamente è possibile modificare manualmente il filtro dei dati locali ma poiché posso avere un numero piuttosto elevato di variabili, sarebbe fantastico avere un modo automatico per farlo 
Ri: Costruttore di grafici: nascondi X categorie senza datiCiao Anna,
La tua idea di aver bisogno di una clausola "dove" o piuttosto di un filtro di qualche tipo è corretta. Prova ad aggiungere la seguente riga allo script del graphbuilder:
Local Data Filter( Add Filter( columns( :Y ), Where( :Y >= 2 & :Y <= 7 ) ) )
Spero che un filtro dati locale vada bene?
Graph Builder(
Size( 527, 448 ),
Show Control Panel( 0 ),
Variables(
X( :GROUP, Order By( :Y, Ascending, Order Statistic( "Mean" ) ) ),
Y( :Y )
),
Elements( Bar( X, Y, Legend( 4 ) ) ),
Column Switcher( :Y, {:Y, :Y 2} ),
Local Data Filter( Add Filter( columns( :Y ), Where( :Y >= 2 & :Y <= 7 ) ) )
);
Re: Graph Builder: nascondi X categorie senza datiÈ un post vecchio, ma potrebbe comunque essere utile:
è possibile utilizzare in aggiunta un filtro dati locale con selezione mancante e inverso per la rispettiva Y.
Local Data Filter(
Inverse( 1 ),
Add Filter( columns( :Y1, :Y2 ), Select Missing( :Y2 ) )
),
Column Switcher( :Y2, {:Y1, :Y2, :Y3} )
Potresti anche aggiungere un evento per l'evento quando selezioni un altro livello del commutatore di colonne, che poi modifica l'impostazione del filtro del commutatore di dati locali per tutte le variabili Y di interesse. Potrebbe essere un'operazione troppo elaborata, ma potrebbe funzionare.
Re: Graph Builder: nascondi X categorie senza datiCiao @martindemel ,
Grazie per il tuo messaggio. Anche se è un post piuttosto vecchio, è sempre bello scoprire modi diversi per raggiungere lo stesso obiettivo.