Gráficos superpuestos<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola,
Me encontré con un problema cuando se trata de apilar columnas. Los datos que miro pueden estar en cientos de columnas de datos. Muchas veces apilo columnas para poder usar un gráfico de distribución en esa columna. Pero a veces mi tabla de datos llega a millones de filas de datos y comienza a fallar cuando apilo columnas. Me preguntaba si hay alguna manera de superponer varios gráficos de distribución para crear un gráfico sin tener que apilar todas las columnas. l ¿Quieres graficar un montón de columnas y superponer todos esos gráficos en uno solo?
¡Gracias por cualquier ayuda!
Re: Superponer gráficosDentro de las limitaciones de hardware de su máquina, generalmente JMP es bueno en este tipo de cosas. Supongo que (por alguna razón) no es posible importar los datos en una sola columna.
Puedes experimentar con el código siguiente. En mi máquina, esto lleva ocho segundos, pero más de la mitad de ese tiempo se dedica a crear la tabla para comenzar y evaluar las fórmulas que contiene. La configuración de nr = 1.000.0000 proporciona un tiempo de ejecución de aproximadamente un minuto.
NamesDefaultToHere(1);
// Number of columns and rows
nc = 130;
nr = 100000;
// Make a test table, dt1, to work with
dt1 = NewTable("Test", NewColumn("Column 1", Numeric, Continuous, Formula(RandomNormal())),AddRows(nr));
For(i=2, i<=nc, i++, dt1 << NewColumn("Column "||Char(i), Numeric, Continuous, Formula(RandomNormal())));
// Get the data from the table into a matrix
m = dt1 << getAsMatrix;
// Close dt1 to recover some memory
Close(dt1, NoSave);
// Reshape into a column vector
m = Shape(m, NRow(m)*NCol(m), 1);
// Make a new table
dt2 = NewTable("Test in a Single Column", NewColumn("All", Numeric, Continuous, Values(m)));
// Recover memory
m = [];
Re: Superponer gráficos¡Gracias por todas sus sugerencias!
Desafortunadamente, no es realmente lo que estoy buscando. Parece que JMP simplemente no puede hacer lo que quiero. Porque no quiero tener que apilar todas las columnas, pero quiero el gráfico de distribución de todos los datos.
DropAllOtherColumns es una función útil que no conocía. Tendré que jugar con eso para ver si apilar mis columnas y agregar esas funciones mejora la eficiencia.
Además, Peter, no me importa ver qué valor corresponde a qué nivel en la distribución, por eso quiero algo equivalente al apilamiento, pero sin el aspecto de consumir memoria. Pero ese gráfico de distribución se parece mucho a lo que busco, desafortunadamente no tengo la versión 12 de JMP. También tengo 130 variables. ja ja
¡Gracias!
Re: Superponer gráficosNo creo que ese tipo de superposición sea posible en la plataforma de distribución. En mi experiencia, el apilamiento es bastante rápido. El siguiente código de ejemplo se ejecuta en unos segundos en mi computadora portátil. Si se aumenta la cantidad de datos a 10^8, se ralentiza, pero el cuello de botella es la plataforma de distribución, no el apilamiento.
En otra nota; un histograma de millones de datos no se ve muy diferente de un subconjunto aleatorio más pequeño de datos. Entonces, si el rendimiento es un problema, puede intentar reducir el tamaño del conjunto de datos antes de la visualización (o simplemente puede necesitar más RAM).
dt = New Table("big");
nr = 100000;
nc = 100;
dt << add rows(nr);
For(i = 1, i <= nc, i++,
dt << New Column("col" || Char(i), set each value(Random Normal()))
);
dt_stacked = dt << Stack(
columns(dt << get column names),
Source Label Column("Label"),
Stacked Data Column("Data"),
Drop All Other Columns(1)
);
dt_stacked << Distribution(Continuous Distribution(Column(:Data), Outlier Box Plot(0)));
Re: Superponer gráficosLa regla general que he oído sobre JMP es tener el doble de memoria disponible que el tamaño de su conjunto de datos.Entonces, ¿tal vez se necesita más memoria?
Re: Superponer gráficosEsto debería apilar sus datos sin duplicarlos demasiado.Elimina la columna de etiqueta ya que no le importa de qué columna original provienen los valores.Soltar todas las otras columnas puede ser la pieza que estás buscando.
newdt = Data Table( "Big Class" ) << Stack(
columns( :height, :weight, :age ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" ),
Drop All Other Columns( 1 ),
Output Table( "hw" )
);
newdt << deletecolumns( "label" );
newdt << Distribution( Continuous Distribution( Column( :Data ) ) );

Re: Superponer gráficossophiaw: En JMP versión 12, puede crear la siguiente visualización (BigClass) Altura por sexo (superposición).

¿Creo que esta es la visualización que buscas? Pero desafortunadamente tienes que apilar la variable Superposición y dices que eso es problemático desde el punto de vista de la gestión de tablas de datos. ¿Cuánta RAM posees? ¿Quizás agregar más RAM pueda ayudar con el bloqueo? Aparte de eso, con tantos niveles de la variable de superposición como usted sugiere, me pregunto qué tan visualmente atractivo será su gráfico. Y mucho menos poder decir realmente qué nivel es cuál. La visualización de superposición de histograma es realmente más efectiva con solo una cantidad relativamente pequeña de niveles para la variable de superposición.
Re: Superponer gráficosEso es útil, pero no es exactamente lo que estoy buscando. Básicamente, quiero que se vea exactamente como el gráfico de distribución (donde seleccionas una columna y la graficas), excepto que quiero poder seleccionar varias columnas y crear una distribución. Solo quiero un gráfico con los valores en la parte inferior y la cantidad de datos en el eje y. Ahora tengo que apilar todas las columnas que quiero graficar juntas y luego graficar esa nueva columna (que es exactamente lo que quiero). El único problema es que tengo alrededor de 130 columnas que quiero graficar juntas y apilarlas no es razonable, especialmente cuando mi tabla de datos generalmente tiene cientos de miles de filas y apilar dos columnas juntas duplica la cantidad de filas; apilar 130 bloquearía JMP o tomaría una enorme cantidad de tiempo. Básicamente, el generador de gráficos no me dice nada porque en este caso no hay un eje x, por lo que no sé cuánto representa cada barra ni nada por el estilo.
¿Hay alguna manera de superponer los gráficos de distribución para hacer un gráfico de todas las columnas en lugar de separar cada columna?
¡Gracias!
Re: Superponer gráficosVea si Graph Builder hará lo que desea.Seleccione todas las columnas y suéltelas en el eje Y.Verás una nube de puntos.Aquí está Big Class usando edad, altura y peso:

luego haga clic derecho->agregar->histograma:

luego haga clic derecho->puntos->eliminar, haga clic en LISTO

haga clic en los títulos y presione eliminar (o agregue un título mejor)

luego puedes usar el triángulo rojo para copiar el script:
Graph Builder(
Size( 534, 418 ),
Show Control Panel( 0 ),
Variables( Y( :age ), Y( :height, Position( 1 ) ), Y( :weight, Position( 1 ) ) ),
Elements( Histogram( Y( 1 ), Y( 2 ), Y( 3 ), Legend( 3 ) ) ),
SendToReport(
Dispatch( {}, "graph title", TextEditBox, {Set Text( "Students" )} ),
Dispatch( {}, "X title", TextEditBox, {Set Wrap( 2 )} ),
Dispatch( {}, "Y title", TextEditBox, {Set Text( "" )} ),
Dispatch(
{},
"Graph Builder",
FrameBox,
{DispatchSeg(
Hist Seg( "Histogram (age)" ),
Histogram Color( -4222943 )
), DispatchSeg(
Hist Seg( "Histogram (height)" ),
Histogram Color( -13977687 )
), DispatchSeg(
Hist Seg( "Histogram (weight)" ),
Histogram Color( -3780931 )
)}
)
)
)