Come tracciare un grafico con linee di riferimento per ogni elemento del riepilogo della tabellaCiao a tutti,
Sto provando a tracciare grafici (script, JMP 13) con linee di riferimento per ogni elemento del riepilogo della mia tabella (grafico del punteggio vs # prova per ogni Nome + Grado, quindi aggiungi la linea di riferimento del 25 e 75 percentile del punteggio sull'asse x) . Gradirei qualsiasi commento
| Nome | Grado | Punto | # Tentativo |
| nome1 | UN | 80 | 2 |
| nome1 | UN | 82 | 3 |
| nome1 | B | 98 | 3 |
| nome1 | C | 86 | 2 |
| nome2 | UN | 88 | 3 |
| nome3 | UN | 90 | 2 |
| nome3 | UN | 88 | 1 |
| nome3 | UN | 94 | 3 |
| nome4 | B | 96 | 2 |
| nome4 | B | 82 | 4 |
| nome4 | UN | 100 | 1 |
| nome4 | C | 92 | 2 |
| nome5 | UN | 84 | 3 |
Ri: Come tracciare un grafico con linee di riferimento per ogni elemento del riepilogo della tabellaCIAO @accelerare ,
Penso di aver capito cosa vuoi. Ma sono anche un po' confuso: vuoi riassumere o semplicemente rappresentare graficamente i 9 grafici bivariati separati?
Lavorando sulla tua tabella di dati originale, puoi facilmente creare tutti e 9 i grafici se esegui un adattamento bivariato, ad esempio:
Bivariate(
Y( :Score ), X( :Name( "# try" ) ),
By( :Name, :Grade )
);
Questo genererà i tuoi nove grafici che avevi colorato nel tuo post precedente.
Quindi, ciò che probabilmente dovrai fare è utilizzare uno o più cicli For per generare le linee quantiliche (o l'area ombreggiata).
Lo script per il primo grafico sarebbe qualcosa del tipo:
Bivariate(
Y( :Score ),
X( :Name( "# try" ) ),
Where( :Name == "name1" & :Grade == "A" ), // this would be selecting
SendToReport(
Dispatch(
{},
"2",
ScaleBox,
{Min( 75 ), Max( 100 ), Inc( 5 ), Minor Ticks( 1 ), // this sets the appearance of the y-axis
Add Ref Line( 83, "Solid", "Blue", "25th quantile", 1 ),
Add Ref Line( 95, "Solid", "Blue", "75th quantile", 1 )}
)
)
);Infatti, se imposti un elenco di nomi NameList={"Name1", "Name2"...} o lo estrai dagli elementi della colonna, allora puoi avere uno script molto breve inserendo For Loops e solo facciamo riferimento all'elemento NameList[i]. Questo sarebbe anche il caso di Where(:Name==NameList[i] & Grade == GradeList[i]).
Un'altra opzione sarebbe ispezionare la struttura ad albero dell'output dal primo script che ho incluso sopra e quindi fare riferimento a AxisBox(i) per ciascuno degli assi y per i 9 grafici. Gli assi y sono tutti dispari, quindi se fai un ciclo For, allora dovresti fare i++ in modo che itera da 1 a 3 a 5 e così via nel ciclo.
Ci sono delle cose davvero buone nel link che @Craige_Hales fornito.
Per il tuo problema specifico, penso che avrai sicuramente bisogno di fare un po' di loop. O quello, oppure puoi fare tutto manualmente una volta e poi salvare lo script nella tabella dati (probabilmente come gruppo), quindi puoi copiarlo/incollarlo e salvarlo come file JSL separato in una nuova finestra di script. Se riesci a capire come farlo manualmente, JMP scriverà il JSL per te e tutto ciò che devi fare è mettere tutto insieme in un file JSL principale che si prende cura di tutto per te. L'unico problema è se decidi di cambiare nomi o riferimenti di colonna o cose del genere. In tal caso, dovrai iniziare a utilizzare le variabili locali.
Spero che questo ti aiuti!,
DS
Ri: Come tracciare un grafico con linee di riferimento per ogni elemento del riepilogo della tabellaForse qualcosa del genere
dtBigClass = Open( "$sample_data/big class.jmp" );
dtage = dtBigClass << Summary( Group( :age ) ); // makes a small table of unique ages
ages = dtage[0, 1]; // [12, 13, 14, 15, 16, 17]
Close( dtage, "nosave" ); // table no longer needed
grid = Lineup Box( N Col( 3 ), spacing( 20, 30 ) ); // Horz,Vert extra space between graphs in pixels
For( iAge = 1, iAge <= N Rows( ages ), iAge += 1, // for each age...
dtBigClass << selectwhere( age == ages[iAge] );
dtSubset = dtBigClass << subset( selectedrows( 1 ), linked( 1 ), "invisible" );
// the summary will be a single row with the requested information
dtSummary = dtSubset << Summary( Mean( :height ), Mean( :weight ), Std Dev( :height ), Std Dev( :weight ), Freq( "None" ), Weight( "None" ) );
// grab the values of interest in simpler variable names
heightMean = dtSummary:name( "Mean(height)" )[1]; // row one has the answers
heightStdDev = dtSummary:name( "Std Dev(height)" )[1];
weightMean = dtSummary:name( "Mean(weight)" )[1];
weightStdDev = dtSummary:name( "Std Dev(weight)" )[1];
Close( dtSummary, "nosave" ); // close the work table, no longer needed
// make a graph, attach to a borderbox so it does not open in a window...
bb = Border Box(
dtSubset << Graph Builder(
Size( 400, 300 ),
Show Control Panel( 0 ),
Show Legend( 0 ), // don't need a legend
Variables( X( :height ), Y( :weight ) ),
Elements( Points( X, Y, Legend( 5 ) ) ),
// add ref lines. You can get a script like this GraphBuilder script by
// making a graph builder interactively, then using the red triangle->get script.
// below, the numbers in the script have been replaced with the variables above.
SendToReport(
Dispatch(
{},
"height",
ScaleBox,
{Add Ref Line( heightMean, "Dotted", "Red", "", 2 ), Add Ref Line( heightMean + heightStdDev, "Dotted", "Blue", "", 2 ),
Add Ref Line( heightMean - heightStdDev, "Dotted", "Blue", "", 2 ),
// force all axes to be the same...
Min( 48.2828947368421 ), Max( 75.8776488919668 ), Inc( 5 ), Minor Ticks( 1 )}
),
Dispatch(
{},
"weight",
ScaleBox,
{Add Ref Line( weightMean, "Dotted", "Red", "", 2 ), Add Ref Line( weightMean + weightStdDev, "Dotted", "Blue", "", 2 ),
Add Ref Line( weightMean - weightStdDev, "Dotted", "Blue", "", 2 ),
// force all axes to be the same...
Min( 55.2100840336134 ), Max( 188.127074359155 ), Inc( 20 ), Minor Ticks( 0 )}
),
Dispatch( {}, "Graph Builder", FrameBox, {Marker Size( 6 ), Transparency( 1 )} ), // make the markers bigger
Dispatch( {}, "graph title", TextEditBox, {Set Text( "Age = " || Char( ages[iAge] ) )} ), // add the age= title
Dispatch( {}, "Graph Builder", OutlineBox, {Set Title( "" )} ) // suppress the Graph Builder title
)
)
);
grid << append( bb ); // add the graph to the grid
); // the iAge loop
dtBigClass << clearRowStates; // undo the final selection
New Window( "the report", V List Box( H Center Box( Text Box( "Big Report", <<SETFONTSIZE></SETFONTSIZE>
Reports grouped in a 3-wide gridReports grouped in a 3-wide gridReport raggruppati in una griglia a 3 larghezze
Ri: Come tracciare un grafico con linee di riferimento per ogni elemento del riepilogo della tabellaGrazie @Craige_Hales per il collegamento, ma la mia principale difficoltà è come programmare l'output dei singoli grafici poiché ognuno ha le proprie linee di riferimento, più chiaramente, mi chiedo come generare grafici per ogni colore in questa tabella di dati:

Grazie!
Ri: Come tracciare un grafico con linee di riferimento per ogni elemento del riepilogo della tabellaEcco un post correlato: https://community.jmp.com/t5/JSL-Cookbook/Use-Summary-to-Automatically-Add-Reference-Lines-to-Graph/ta-p/41709
Ri: Come tracciare un grafico con linee di riferimento per ogni elemento del riepilogo della tabellaGrazie @SDF1 per la tua risposta e scusa per non essere stato molto chiaro. Qui vorrei spiegare un po 'di più:
prima di tutto, sto cercando di scrivere lo script in una finestra di script separata in modo da poterlo eseguire in modo indipendente, ecco la prima parte dello script in cui sto cercando di ottenere il riepilogo:
Names Default To Here( 1 );
dt = Current Data Table();
Summary = dt << Summary(
Group( :Name, :Grade ),
Median( :Score ),
// other statistics can be added here//
Link to Original Data Table( 0 )
);
l'output sarà simile a questo:

Ora, quello che voglio veramente sono i 9 grafici (Score vs # try) (uno per ogni riga (con punti dati N Rows)), quindi utilizzare le statistiche di ciascun gruppo da aggiungere alle linee di riferimento (tutte tramite scripting).
Nel tuo esempio di grafico, sembra che sia per name1 con qualsiasi Grado.
Grazie
Ri: Come tracciare un grafico con linee di riferimento per ogni elemento del riepilogo della tabellaCIAO @accelerare ,
Non sono sicuro di aver capito del tutto cosa vuoi fare, ma potresti avere difficoltà a scrivere interamente l'intera cosa. Se mantieni la tabella dei dati per un po' o la carichi, potresti voler fare le analisi separatamente e poi salvarle nella tabella dei dati.
Se vuoi scrivere tutto nello script, dovrai comunque eseguire le analisi per determinare i quantili 25/75, ecc.
Quando dici che stai rappresentando graficamente "punteggio vs # prova", intendi quando fai un "adattamento y per x" quel punteggio è "y" e "# prova" è "x"?
Inoltre, quando dici riepilogo della tabella, intendi che stai trovando la media del punteggio e #prova mentre raggruppi per nome e voto? Oppure vuoi dire che stai tabulando per nome il voto e trovando la media del punteggio e dei valori #try?
Potresti farlo in un paio di modi però. Ho preso il tuo tavolo e l'ho portato in JMP, ed ecco cosa ho fatto (supponendo che ci stia pensando allo stesso modo di te):
Tabula per nome (A, B, C sono i # tentativi), questo aiuta a ottenere i mezzi, ma puoi scriverlo separatamente se necessario.

Con questo a portata di mano, l'ho rappresentato graficamente in un paio di modi diversi: adattamento bivariato o istogramma (l'istogramma ha già le informazioni sul quartile prontamente disponibili dal box plot). e quindi puoi aggiungere linee di riferimento tramite il modo normale.


Per lo scripting di tutto questo, assicurati di utilizzare il pulsante rosso caldo per accedere allo script JSL effettivo per generare ciò che desideri. Ma ancora una volta, se salvi lo script nella tabella dei dati, ogni volta che apri la tabella dei dati, puoi fare clic sul pulsante di scelta rapida verde ed eseguirlo nuovamente rapidamente.
Spero che questo ti aiuti!,
DS