Grafico a barre raggruppato per variabileCiao a tutti,
Potrebbe sembrare una domanda semplice ma non ho trovato il modo di farlo funzionare.
Ho eseguito un test su più campioni e per ciascun campione, il test genera le percentuali dei tre diversi componenti che compongono il campione.
Ho impostato una tabella di dati con 4 colonne: 1 per il nome del campione e gli altri 3 per le percentuali dei 3 componenti.
Sto cercando di creare un grafico a barre cluster come mostrato nell'immagine allegata (eseguita in Excel), in cui i dati sono raggruppati in 3 cluster diversi, corrispondenti ai 3 componenti.
So che potrei provare a impilare prima tutte le colonne dei componenti (descritto "Clustering per variabile" Qui ); tuttavia questo lo trasformerebbe in una tabella super lunga e difficile da navigare (ho diversi tipi di test, ognuno con componenti diversi). Inoltre, avrei bisogno di avere 2 tabelle separate, una per il formato dati originale che è più facile da navigare e un'altra per i grafici a barre raggruppati.
Sto pensando a due diversi metodi per aggirare questo.
1) Per ogni test, tracciare i risultati per ciascun componente fianco a fianco. C'è un modo per far sì che tutti condividano lo stesso asse y?
2) Utilizzando il metodo di impilamento delle colonne, esiste un modo per combinare le due tabelle in una in modo da poter avere uno script salvato nella tabella originale che generi automaticamente i grafici a barre raggruppati mentre faccio clic su di esso? Sono consapevole che potrei salvare lo script che genera la tabella impilata, ma avrei comunque bisogno di ricreare i grafici a barre raggruppati.
Grazie!
Ri: Grafico a barre raggruppato per variabileSono stato in grado di riprodurre il tuo grafico con una semplice pila e poi un Graph Builder.

Names default to here(1);
dt = New Table( "Example",
Add Rows( 5 ),
New Column( "Sample",
Character,
"Nominal",
Set Values( {"A", "B", "C", "D", "E"} )
),
New Column( "Component 1",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.828470097854734, 0.8212191631319, 0.842324016243219,
0.882067339960486, 0.872661964339204]
)
),
New Column( "Component 2",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.116772082395202, 0.140967620703167, 0.125925316195233,
0.0770373142695993, 0.113037678561007]
)
),
New Column( "Component 3",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.0547578197500645, 0.0378132161649326, 0.0317506675615479,
0.0408953457699151, 0.0143003570997886]
)
)
);
dtStack = dt << Stack(
columns( :Component 1, :Component 2, :Component 3 ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
dtStack << Graph Builder(
Size( 534, 454 ),
Show Control Panel( 0 ),
Variables(
X( :Label ),
X( :Sample, Position( 1 ) ),
Y( :Data ),
Overlay( :Sample )
),
Elements( Bar( X( 1 ), X( 2 ), Y, Legend( 33 ) ) ),
SendToReport(
Dispatch(
{},
"Label",
ScaleBox,
{Label Row( 1, {Automatic Tick Marks( 0 ), Show Major Labels( 0 )} )}
),
Dispatch(
{},
"Graph Builder",
FrameBox,
{DispatchSeg( BarSeg( 1 ), Set Width Proportion( 1 ) )}
)
)
);
Ri: Grafico a barre raggruppato per variabileGrazie!
Non ho mai fatto scripting in JMP ma sono stato in grado di unire lo script dello stack dalla tabella originale e lo script del generatore di grafici dalla tabella in pila in uno con una piccola modifica e farlo funzionare. È ancora necessario generare una nuova tabella, ma almeno avrò solo una tabella da conservare.
Sembra che dovrò iniziare a imparare a scrivere in JMP per semplificarmi la vita.
Per curiosità, c'è qualche funzione in JMP che mi permette di "registrare" ciò che faccio nell'interfaccia utente nello script?
Ri: Grafico a barre raggruppato per variabileLa risposta è si.
La JSL che ho pubblicato è stata per lo più scritta da JMP. Ogni piattaforma che esegui e ciascuna delle operazioni File ==> Tabelle che esegui, presenterà la JSL che rigenera le tabelle di dati o i display che sono stati creati interattivamente.
Quando si crea una nuova tabella di dati impilando, la voce "Origine" per la nuova tabella contiene la JSL che creerà la tabella di dati.
Per la piattaforma Graph Builder, se vai al triangolo rosso e selezioni "Salva script", esso fornirà uno script che ricrea il grafico.
Ri: Grafico a barre raggruppato per variabileHo ottenuto quello che stai dicendo ed è stato esattamente quello che ho fatto: combinare lo script di impilamento delle tabelle e lo script Graph Builder.
Stavo solo chiedendo i casi in cui ho bisogno di fare più operazioni (diciamo, generare più grafici nella seconda tabella) anziché solo due - se c'è un modo per "registrare" tutte quelle operazioni in un singolo script mentre eseguo loro. Non dicendo che è necessario, mi sto solo chiedendo se una tale funzione esiste in JMP.
Ri: Grafico a barre raggruppato per variabileIl metodo JMP è semplicemente quello di prendere gli script da ciascuno dei grafici, insieme alle manipolazioni dei dati e inserirli in un singolo script.
Sembra un po 'come se stessi pensando di salvare gli script nella tabella dei dati. Non è quello che sto indicando. Sto pensando di salvare gli script di manipolazione delle tabelle e gli script di salvataggio della piattaforma in una nuova finestra di script.
Ri: Grafico a barre raggruppato per variabileSì, sembra che io abbia frainteso quello che volevi dire.
Puoi espandere di più sul " script di manipolazione delle tabelle e Platform Save Scripts "bit?
Una cosa che ho appena scoperto è che potrei effettivamente copiare l'intero script della tabella dei dati. Quindi questo da solo dovrebbe essere sufficiente per quello di cui ho attualmente bisogno. Devo ancora salvare prima i singoli report nella tabella dei dati come nuovi script, ma ora posso copiarli tutti contemporaneamente anziché singolarmente.
Ri: Grafico a barre raggruppato per variabileLasciami passare attraverso quello che ho fatto per produrre la sceneggiatura che ti ho fornito in questa discussione, come modo per illustrare il mio modo di creare una sceneggiatura.
- Non hai fornito una tabella di dati, quindi ho dovuto creare la mia tabella di dati di esempio.
- Dal momento che volevo fornirti la mia copia della mia tabella di dati di esempio, ho dovuto decidere se era meglio salvare e caricare la tabella o includerla nello script. Poiché è di dimensioni molto modeste, ho deciso di inserire la sceneggiatura.
- Quindi ho aperto una finestra di script.
- Ho digitato manualmente
Names Default to Here(1);
Normalmente questa dovrebbe essere la prima affermazione di ogni script. Assicura che le variabili JSL in questo script siano isolate a questo script e non interferiscano con altri script.
- Sono quindi andato alla tabella dei dati che avevo creato e ho fatto clic sul triangolo rosso nel pannello della tabella e ho selezionato "Copia script tabella". Ciò ha inserito lo script che genererà la tabella così com'è attualmente, nel buffer di incollaggio.
- Sono quindi tornato alla finestra dello script e l'ho incollato nello script appena sotto la prima riga
Names Default to Here(1);<BR />
dt = New Table( "Example",
Add Rows( 5 ),
New Column( "Sample",
Character,
"Nominal",
Set Values( {"A", "B", "C", "D", "E"} )
),
New Column( "Component 1",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.828470097854734, 0.8212191631319, 0.842324016243219,
0.882067339960486, 0.872661964339204]
)
),
New Column( "Component 2",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.116772082395202, 0.140967620703167, 0.125925316195233,
0.0770373142695993, 0.113037678561007]
)
),
New Column( "Component 3",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.0547578197500645, 0.0378132161649326, 0.0317506675615479,
0.0408953457699151, 0.0143003570997886]
)
)
);
Ho anche aggiunto dt = davanti alla definizione della tabella, che consente di fare riferimento a questa tabella di dati con "dt" anziché avere un riferimento più formale di "tabella di dati (" esempio ")".
- Ho quindi iniziato a giocare, in modo interattivo con la tabella dei dati e il generatore di grafici, per capire cosa dovevo fare per produrre il grafico che volevo. Questa era una metodologia iterativa, che richiedeva più manipolazioni della tabella di dati ed esecuzioni del generatore di grafici finché non ottenni i risultati desiderati.
- Quindi, una volta che sono stato contento dei risultati, ho visto quello che ci voleva per generare i risultati. Era una semplice manipolazione della tabella di impilare i dati e quindi un generatore di grafici eseguito sui dati impilati.
- Per prima cosa avevo bisogno di ottenere il codice dello script. Questo codice è prontamente disponibile nel pannello della tabella dei dati in pila. Se fai clic con il pulsante destro del mouse sul triangolo verde davanti alla voce "sorgente" nel pannello della tabella, puoi selezionare "Modifica". Verrà visualizzato il JSL che può essere utilizzato per ricreare questa tabella di dati. Ho selezionato tutto il codice e copiato nel buffer di incollaggio, subito dopo il JSL già esistente nella finestra dello script
Names default to here(1);
dt = New Table( "Example",
Add Rows( 5 ),
New Column( "Sample",
Character,
"Nominal",
Set Values( {"A", "B", "C", "D", "E"} )
),
New Column( "Component 1",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.828470097854734, 0.8212191631319, 0.842324016243219,
0.882067339960486, 0.872661964339204]
)
),
New Column( "Component 2",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.116772082395202, 0.140967620703167, 0.125925316195233,
0.0770373142695993, 0.113037678561007]
)
),
New Column( "Component 3",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.0547578197500645, 0.0378132161649326, 0.0317506675615479,
0.0408953457699151, 0.0143003570997886]
)
)
);
dtStack = dt << Stack(
columns( :Component 1, :Component 2, :Component 3 ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
Si noti che ho anche aggiunto un puntatore allo stack "dtStack =" e sostituito il riferimento lungo alla tabella di dati originale con il riferimento breve di "" dt ";
- Successivamente sono andato all'output di Graph Builder e ho fatto clic sul triangolo rosso e selezionato "Salva script ==> Negli Appunti"
- Ho quindi incollato gli Appunti (incolla buffer) nello script.
Names default to here(1);
dt = New Table( "Example",
Add Rows( 5 ),
New Column( "Sample",
Character,
"Nominal",
Set Values( {"A", "B", "C", "D", "E"} )
),
New Column( "Component 1",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.828470097854734, 0.8212191631319, 0.842324016243219,
0.882067339960486, 0.872661964339204]
)
),
New Column( "Component 2",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.116772082395202, 0.140967620703167, 0.125925316195233,
0.0770373142695993, 0.113037678561007]
)
),
New Column( "Component 3",
Numeric,
"Continuous",
Format( "Percent", 7, 2 ),
Set Selected,
Set Values(
[0.0547578197500645, 0.0378132161649326, 0.0317506675615479,
0.0408953457699151, 0.0143003570997886]
)
)
);
dtStack = dt << Stack(
columns( :Component 1, :Component 2, :Component 3 ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
dtStack << Graph Builder(
Size( 534, 454 ),
Show Control Panel( 0 ),
Variables(
X( :Label ),
X( :Sample, Position( 1 ) ),
Y( :Data ),
Overlay( :Sample )
),
Elements( Bar( X( 1 ), X( 2 ), Y, Legend( 33 ) ) ),
SendToReport(
Dispatch(
{},
"Label",
ScaleBox,
{Label Row( 1, {Automatic Tick Marks( 0 ), Show Major Labels( 0 )} )}
),
Dispatch(
{},
"Graph Builder",
FrameBox,
{DispatchSeg( BarSeg( 1 ), Set Width Proportion( 1 ) )}
)
)
);
Nota, ho aggiunto "dtStack <<" davanti all'istruzione Graph Builder. Questo è il modo migliore per garantire che Graph Builder verrà eseguito sui dati sovrapposti e non sul codice originale.
Quindi questo è il processo usato per creare uno script combinato. Come sono sicuro che puoi immaginare, è possibile aggiungere molte piattaforme diverse a tale script, con le quali è possibile utilizzare la tabella di dati originale ("dt") o la tabella di dati in pila ("dtStack"). Potresti anche avere altre manipolazioni della tabella di dati che devi aggiungere, ecc.
Per quanto riguarda la copia in massa, gli script che hai salvato in una tabella di dati, non sono consapevole di poterlo fare, tuttavia, non ho avuto problemi con questo. Il più delle volte, sto cercando di creare uno script, non di fare la mia analisi dei dati.
Ri: Grafico a barre raggruppato per variabilePer essere chiari, non esiste un modo per registrare tutte le operazioni in JMP in un singolo script. È possibile registrare una macro in questo modo in Excel ma non in JMP.
È invece possibile accedere alla JSL per ogni piattaforma che si esegue in JMP facendo clic sul piccolo triangolo rosso e selezionando una delle opzioni Salva script.
Ri: Grafico a barre raggruppato per variabileJim,
Grazie per avermi guidato attraverso il tuo codice: ora chiarisci le cose. Domanda rapida: se voglio aggiungere più operazioni alla nuova tabella in pila, dovrò comunque richiamarla prima di ogni operazione, giusto? Dì, se voglio anche tracciare un istogramma dalla tabella in pila, aggiungerò solo questa riga seguente?
dtStack << Distribution( Continuous Distribution( Column( :Data ) ) );
Ri: Grafico a barre raggruppato per variabileGrazie! Questo è quello che mi chiedevo. Non è un grosso problema, poiché, come hai detto, è possibile accedere allo script per ogni operazione.