Gráfico de barras agrupadas por variableHola a todos,
Esto puede sonar como una pregunta simple, pero no he encontrado una manera de hacer que esto funcione.
Realicé una prueba en varias muestras y para cada muestra, la prueba genera los porcentajes de los tres componentes diferentes que componen la muestra.
Configuré una tabla de datos con 4 columnas: 1 para el nombre de la muestra y las otras 3 para los porcentajes de los 3 componentes.
Estoy tratando de crear un gráfico de barras agrupadas como se muestra en la imagen adjunta (realizada en Excel), donde los datos se agrupan en 3 grupos diferentes, correspondientes a los 3 componentes.
Sé que podría intentar apilar todas las columnas de componentes primero (se describe "Clustering by Variable" aquí ); sin embargo, eso lo convertiría en una tabla súper larga y difícil de navegar (tengo múltiples tipos de pruebas, cada una con diferentes componentes). Además, necesitaría tener 2 tablas separadas, una para el formato de datos original que es más fácil de navegar y otra para los gráficos de barras agrupadas.
Estoy pensando en dos métodos diferentes para evitar esto.
1) Para cada prueba, trace los resultados de cada componente uno al lado del otro. ¿Hay alguna manera de que todos compartan el mismo eje y?
2) Usando el método de apilamiento de columnas, ¿hay alguna forma de combinar las dos tablas en una para poder tener un script guardado en la tabla original que generaría automáticamente los gráficos de barras agrupadas cuando hago clic en ellas? Soy consciente de que podría guardar el script que genera la tabla apilada, pero aún así tendría que volver a hacer los gráficos de barras agrupadas.
¡Gracias!
Re: Gráfico de barras agrupadas por variablePude reproducir su gráfico con una pila simple y luego un generador de gráficos.

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 ) )}
)
)
);
Re: Gráfico de barras agrupadas por variable¡Gracias!
Nunca he hecho secuencias de comandos en JMP, pero pude fusionar la secuencia de comandos de la pila de la tabla original y la secuencia de comandos del generador de gráficos de la tabla apilada en una con una pequeña modificación y lo hice funcionar. Todavía se necesita generar una nueva tabla, pero al menos solo tendré una tabla para mantener.
Parece que tendré que empezar a aprender a escribir en JMP para hacerme la vida más fácil.
Por curiosidad, ¿hay alguna función en JMP que me permita "grabar" lo que hago en la interfaz de usuario en el script?
Re: Gráfico de barras agrupadas por variableLa respuesta es sí.
El JSL que publiqué fue escrito principalmente por JMP. Cada plataforma que ejecute, y cada una de las operaciones de archivo ==> tablas que realice, mostrará el JSL que regenerará las tablas o pantallas de datos que se crearon interactivamente.
Cuando crea una nueva tabla de datos apilando, la entrada "Fuente" para la nueva tabla contiene el JSL que creará la tabla de datos.
Para la plataforma Graph Builder, si va al triángulo rojo y selecciona "Guardar secuencia de comandos", proporcionará una secuencia de comandos que recreará el gráfico.
Re: Gráfico de barras agrupadas por variableEntendí lo que estás diciendo y eso fue exactamente lo que hice: combinar el script de apilamiento de tablas y el script Graph Builder.
Solo estaba preguntando los casos en los que necesito realizar múltiples operaciones (por ejemplo, generar múltiples gráficos en la segunda tabla) en lugar de solo dos, si hay una manera de "registrar" todas esas operaciones en un solo script mientras realizo ellos. No digo que sea necesario, solo me pregunto si existe tal característica en JMP.
Re: Gráfico de barras agrupadas por variableEl método JMP es simplemente tomar los scripts de cada uno de los gráficos, junto con las manipulaciones de datos y colocarlos en un solo script.
Suena un poco como si estuvieras pensando en guardar las secuencias de comandos en la tabla de datos. Eso no es lo que estoy indicando. Me estoy ocupando de guardar los scripts de manipulación de tablas y los scripts de guardado de plataforma en una nueva ventana de scripts.
Re: Gráfico de barras agrupadas por variableSí, parece que interpreté mal lo que querías decir.
¿Se puede ampliar más en el " guiones de manipulación de tabla y guiones de guardado de plataforma "bit?
Una cosa que acabo de descubrir es que en realidad podría copiar todo el script de la tabla de datos. Entonces esto solo debería ser suficiente para lo que necesito actualmente. Todavía necesito guardar primero los informes individuales en la Tabla de datos como nuevos scripts, pero ahora puedo copiarlos todos al mismo tiempo en lugar de hacerlo individualmente.
Re: Gráfico de barras agrupadas por variablePermítanme repasar lo que hice para producir el guión que les proporcioné en esta discusión, como una forma de ilustrar mi forma de crear un guión.
- No proporcionó una tabla de datos, así que tuve que crear mi propia tabla de datos de ejemplo.
- Como quería proporcionarle mi copia de mi tabla de datos de ejemplo, tuve que decidir si era mejor guardar y cargar la tabla, o simplemente incluirla en el script. Como tiene un tamaño muy modesto, decidí poner el script.
- Entonces abrí una ventana de script.
- Escribí manualmente
Names Default to Here(1);
Esta normalmente debería ser la primera declaración de cada script. Asegura que las variables JSL en esta secuencia de comandos estarán aisladas de esta secuencia de comandos y no interferirán con otras secuencias de comandos.
- Luego fui a la tabla de datos que había creado, hice clic en el triángulo rojo en el panel de la tabla y seleccioné "Copiar guión de tabla". Eso colocó el script que generará la tabla tal como existe actualmente, en el búfer de pegado.
- Luego volví a la ventana del script y lo pegué en el script justo debajo de la primera línea
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]
)
)
);
También agregué dt = delante de la definición de la tabla, que permite hacer referencia a esta tabla de datos con "dt" en lugar de tener una referencia más formal de "tabla de datos (" ejemplo ")".
- Luego comencé a jugar, interactivamente con la tabla de datos y el generador de gráficos, para descubrir qué tenía que hacer para producir el gráfico que quería. Esta era una metodología iterativa, que requería múltiples manipulaciones de tablas de datos y ejecuciones de generador de gráficos hasta que obtuve los resultados que quería.
- Entonces, una vez que estuve contento con los resultados, busqué lo que se necesitaba para generar los resultados. Fue una simple manipulación de la tabla de apilar los datos, y luego un generador de gráficos se ejecutó sobre los datos apilados.
- Primero necesitaba obtener el código del script. Este código está fácilmente disponible en el panel de tabla de la tabla de datos apilados. Si hace clic derecho en el triángulo verde frente a la entrada "fuente" en el panel de la tabla, puede seleccionar "Editar". Esto mostrará el JSL que se puede usar para recrear esta tabla de datos. Seleccioné todo el código y lo copié en el búfer de pegado, justo después del JSL ya existente en la ventana del 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" )
);
Tenga en cuenta que también agregué un puntero a la pila "dtStack =" y reemplacé la referencia larga a la tabla de datos original con la referencia corta de "" dt ";
- Luego fui a la salida de Graph Builder e hice clic en el triángulo rojo y seleccioné "Guardar script ==> en el portapapeles"
- Luego pegué el Portapapeles (pegar búfer) en el 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 ) )}
)
)
);
Tenga en cuenta que agregué "dtStack <<" delante de la instrucción Graph Builder. Esta es la mejor manera de garantizar que Graph Builder se ejecute en los datos apilados y no en el código original.
Entonces este es el proceso utilizado para crear un script combinado. Como estoy seguro de que puede imaginar, se pueden agregar muchas Plataformas diferentes a dicho script, con ellas utilizando la tabla de datos original ("dt") o la tabla de datos apilados ("dtStack"). También puede tener otras manipulaciones de la tabla de datos que necesita agregar, etc.
Con respecto a la copia en masa, los scripts que ha guardado en una tabla de datos, no tengo conocimiento de poder hacerlo, sin embargo, no he tenido un problema con eso. La mayoría de las veces, estoy buscando construir un script, no hacer mi propio análisis de datos.
Re: Gráfico de barras agrupadas por variablePara ser claros, no hay una manera de registrar todas sus operaciones en JMP en un solo script. Puede grabar una macro de esta manera en Excel pero no en JMP.
En cambio, se puede acceder al JSL para cada plataforma que ejecute en JMP haciendo clic en el pequeño triángulo rojo y seleccionando una de las opciones de Guardar guión.
Re: Gráfico de barras agrupadas por variableJim
Gracias por guiarme a través de su código, ahora deja las cosas muy claras. Pregunta rápida: si deseo agregar varias operaciones a la nueva tabla apilada, aún tendré que llamarla antes de cada operación, ¿verdad? Digamos, si también quiero trazar un histograma de la tabla apilada, ¿agregaré esta línea siguiente?
dtStack << Distribution( Continuous Distribution( Column( :Data ) ) );
Re: Gráfico de barras agrupadas por variable¡Gracias! Eso es lo que me preguntaba. Sin embargo, no es gran cosa, ya que, como dijiste, se puede acceder al script para cada operación.