Cómo trazar un gráfico con líneas de referencia para cada elemento del resumen de la tablaHola a todos,
Estoy tratando de trazar gráficos (secuencia de comandos, JMP 13) con líneas de referencia para cada elemento del resumen de mi tabla (gráfico de puntaje vs # intento para cada Nombre + Grado, luego agregue la línea de referencia de 25 y 75 percentil de Puntaje en el eje x) . agradeceria cualquier comentario
| Nombre | Calificación | Puntaje | # intentar |
| nombre1 | A | 80 | 2 |
| nombre1 | A | 82 | 3 |
| nombre1 | B | 98 | 3 |
| nombre1 | C | 86 | 2 |
| nombre2 | A | 88 | 3 |
| nombre3 | A | 90 | 2 |
| nombre3 | A | 88 | 1 |
| nombre3 | A | 94 | 3 |
| nombre4 | B | 96 | 2 |
| nombre4 | B | 82 | 4 |
| nombre4 | A | 100 | 1 |
| nombre4 | C | 92 | 2 |
| nombre5 | A | 84 | 3 |
Re: Cómo trazar un gráfico con líneas de referencia para cada elemento del resumen de la tablaHola @girar ,
Creo que entiendo lo que quieres. Pero, también estoy un poco confundido: ¿quieres resumir o simplemente graficar los 9 gráficos bivariados separados?
Trabajando con su tabla de datos original, puede crear fácilmente los 9 gráficos si hace un ajuste bivariado, por ejemplo:
Bivariate(
Y( :Score ), X( :Name( "# try" ) ),
By( :Name, :Grade )
);
Esto generará tus nueve gráficos que habías coloreado en tu publicación anterior.
Entonces, lo que probablemente tendrá que hacer es usar For Loop(s) para generar las líneas cuantiles (o área sombreada).
El script para el primer gráfico sería algo como:
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 )}
)
)
);De hecho, si configura una lista de nombres NameList={"Name1", "Name2"...}, o la extrae de los elementos de la columna, entonces puede tener una secuencia de comandos muy corta colocando For Loops y simplemente hagamos referencia al elemento NameList[i]. Este sería también el caso de Where(:Name==NameList[i] & Grade == GradeList[i]).
Otra opción sería inspeccionar la estructura de árbol de la salida del primer script que incluí arriba y luego haría referencia al AxisBox(i) para cada uno de los ejes y de los 9 gráficos. Los ejes y son todos impares, así que si haces un For Loop, entonces tendrías que hacer i++ para que itera de 1 a 3 a 5 y así sucesivamente en el loop.
Hay algunas cosas realmente buenas en el enlace que @Craige_Hales proporcionó.
Para su problema específico, creo que definitivamente necesitará hacer un bucle. O eso, o puede hacer todo manualmente una vez y luego simplemente guardar el script en la tabla de datos (probablemente como un grupo), y luego puede copiar/pegar eso y guardarlo como un archivo JSL separado en una nueva ventana de script. Si puede descubrir cómo hacerlo manualmente, JMP escribirá el JSL por usted, y todo lo que necesita hacer es ponerlo todo junto en un archivo JSL maestro que se encarga de todo por usted. El único problema que existe es si decide cambiar los nombres o las referencias de las columnas o cosas por el estilo. Si lo hace, entonces deberá comenzar a usar variables locales.
¡Espero que esto ayude!,
SD
Re: Cómo trazar un gráfico con líneas de referencia para cada elemento del resumen de la tablaTal vez algo como esto
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 gridInformes agrupados en una cuadrícula de 3 anchos
Re: Cómo trazar un gráfico con líneas de referencia para cada elemento del resumen de la tablaGracias @Craige_Hales para el enlace, pero mi principal dificultad es cómo programar para generar gráficos individuales, ya que cada uno tiene sus propias líneas de referencia, más claramente, me pregunto cómo generar gráficos para cada color en esta tabla de datos:

¡Gracias!
Re: Cómo trazar un gráfico con líneas de referencia para cada elemento del resumen de la tablaAquí hay una publicación relacionada: https://community.jmp.com/t5/JSL-Cookbook/Use-Summary-to-Automatically-Add-Reference-Lines-to-Graph/ta-p/41709
Re: Cómo trazar un gráfico con líneas de referencia para cada elemento del resumen de la tablaGracias @SDF1 por tu respuesta y perdón por no ser muy claro. Aquí me gustaría explicar un poco más:
en primer lugar, estoy tratando de escribir el script en una ventana de script separada para poder ejecutarlo de forma independiente, aquí está la primera parte del script donde estoy tratando de obtener el resumen:
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 )
);
la salida se verá así:

Ahora, lo que realmente quiero son los 9 gráficos (puntuación frente a # intento) (uno para cada fila (que tiene puntos de datos de N filas)), y luego uso las estadísticas de cada grupo para agregar a las líneas de referencia (todo por secuencias de comandos).
En su ejemplo de gráfico, parece que es para nombre1 con cualquier grado.
Gracias
Re: Cómo trazar un gráfico con líneas de referencia para cada elemento del resumen de la tablaHola @girar ,
No estoy seguro de entender completamente lo que quiere hacer, pero es posible que tenga dificultades para escribir todo el guión por completo. Si conserva la tabla de datos durante un tiempo o la carga, es posible que desee realizar los análisis por separado y luego guardarlos en la tabla de datos.
Si desea crear un script para todo, deberá ejecutar los análisis para determinar los cuantiles 25/75, etc.
Cuando dices que estás graficando "puntaje vs # intento", ¿quieres decir que cuando haces un "ajuste y por x" ese puntaje es "y" y "# intento" es "x"?
Además, cuando dice resumen de la tabla, ¿quiere decir que está encontrando la media de la puntuación y #intentar mientras agrupa por nombre y grado? ¿O quiere decir que está tabulando por nombre el grado y encontrando la media de los valores de puntuación y #prueba?
Sin embargo, podrías hacerlo de un par de maneras. Tomé su mesa y la llevé a JMP, y esto es lo que hice (asumiendo que lo estoy pensando de la misma manera que usted):
Tabular por nombre (A, B, C son los # intentos), esto ayuda a obtener los medios, pero puede escribir esto por separado si es necesario.

Con esto a mano, lo grafiqué de un par de maneras diferentes: ajuste bivariado o histograma (el histograma ya tiene la información del cuartil disponible en el diagrama de caja). y luego puede agregar líneas de referencia de la manera normal.


Para programar todo esto, asegúrese de usar el botón rojo para acceder al script JSL real para generar lo que desea. Pero nuevamente, si guarda el script en la tabla de datos, cada vez que abra la tabla de datos, puede hacer clic en el botón verde y volver a ejecutarlo rápidamente.
¡Espero que esto ayude!,
SD