Trazar diagrama 3DHola,
Estoy intentando trazar un diagrama 3D pero no lo logro. Los datos los tengo en Excel así:
| | Y | 4,15815757 | 10,5410784 |
| X | | Z1 | Z2 |
| 0,00038225 | | 0,04740562 | 0,09242527 |
| 0,00032384 | | 0,13448339 | 0,34250103 |
Pero tengo muchas filas y columnas. Este es sólo un ejemplo. Apreciaría cualquier ayuda.
Gracias.
Re: Trazar diagrama 3D'Daten.xlsx' tiene 23 valores Y, 444 valores X y un valor Z para cada uno (10212 valores en total). Entonces, ¿no debería ser 'dtFinal':
dtFinal = New Table( "Converted", New Column( "X" ), New Column( "Y" ), New Column( "Z" ) );
dtFinal << add rows( N Rows( Xmat ) * N Rows( Ymat ) );
rowcnt = 0;
For( Xcnt = 1, Xcnt <= N Rows( Xmat ), Xcnt++,
For( Ycnt = 1, Ycnt <= N Rows( Ymat ), Ycnt++,
rowcnt++;
dtFinal:X[rowcnt] = Xmat[Xcnt];
dtFinal:Y[rowcnt] = Ymat[Ycnt];
dtFinal:Z[rowcnt] = Zmat[Xcnt, Ycnt];
)
);
¿Dar algo así?

Sin saber nada sobre el contexto de los datos y lo que estás intentando, imagino que son posibles visualizaciones más informativas.
Re: Trazar diagrama 3DEl código funciona bastante bien. Descubrí que no tengo suficiente memoria disponible para ejecutar todas las filas. 104.284.944 , por eso no se ejecutó.
Estoy usando JMP 12.
Muchas gracias.
Re: Trazar diagrama 3DDescargué tu archivo de Excel y lo guardé.Luego señalé el script JSL al nuevo archivo.También tuve que cambiar la línea en el código.
Worksheets( "example" ),
a
Worksheets( "JMP" ),
porque había cambiado el nombre de la hoja de cálculo dentro del libro.
No ejecuté el programa hasta las 104,284,944 filas completas que producirá JSL si se ejecuta hasta el final, pero sí lo ejecuté hasta un número menor para demostrarme a mí mismo que el código funcionaría.
Si el cambio anterior no es el problema, la siguiente pregunta que tendría es: ¿qué versión de JMP está utilizando?
Re: Trazar diagrama 3DMuchas gracias por tu ayuda, realmente lo aprecio.
Sin embargo, cuando ejecuto el script, muestra un error en la línea 70 que dice que no se puede determinar el valor en la columna X porque el número de filas (0) no es válido.
Adjunto los datos de Excel en los que estoy trabajando. ¿Te importaría echarle un vistazo? Soy un usuario nuevo en JSL, por eso no tengo mucha experiencia.
Gracias.
Re: Trazar diagrama 3DMi primera sugerencia es mover Add Rows() hacia arriba en el bucle.Agregar filas() es una función bastante lenta, por lo que si pudiera agregar todas las filas que necesita para la tabla de datos, justo después de la Nueva tabla() inicial, el programa sería mucho más rápido.Eso también significaría que tendría que agregar un contador de filas general para realizar un seguimiento de en qué fila está trabajando, en lugar de usar N filas().
Names Default To Here( 1 );
// Read in Excel file
dt = Open(
"c:\users\txjim\documents\read in issue\example.xlsx"
/*"<YOUR path="" to="" the="" excel="" file="">\example.xlsx"*/,
Worksheets( "example" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 0 ),
,
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 1 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
);
// Get Y Matrix
Ymat = {};
For( i = 3, i <= N Col( dt ), i++,
If( Column( i )[1] != "",
Ymat = Ymat |/ Matrix( Num( Column( i )[1] ) )
)
);
// Get rid of unrequired cells, and get the X and Z matrices
dt << select rows( [1, 2, 3] );
dt << delete rows;
dt << delete column( 2 );
// Convert all columns to numerics
For( i = 1, i <= N Col( dt ), i++,
Column( dt, i ) << data type( numeric )
);
// Get X matrix
Xmat = Column( dt, 1 ) << get as matrix;
dt << delete column( 1 );
// Get Z matrix
Zmat = dt << get as matrix;
// Create new data table, and output the data
dtFinal = New Table( "Converted", New Column( "X" ), New Column( "Y" ), New Column( "Z" ) );
dtFinal << add rows( N Rows( Xmat ) * N Rows( Ymat ) * N Rows( Zmat ) * N Cols( Zmat ) );
rowcnt = 0;
For( Xcnt = 1, Xcnt <= N Rows( Xmat ), Xcnt++,
For( Ycnt = 1, Ycnt <= N Rows( Ymat ), Ycnt++,
For( Zrowcnt = 1, Zrowcnt <= N Rows( Zmat ), Zrowcnt++,
For( Zcolcnt = 1, Zcolcnt <= N Cols( Zmat ), Zcolcnt++,
rowcnt++;
dtFinal:X[rowcnt] = Xmat[Xcnt];
dtFinal:Y[rowcnt] = Ymat[Ycnt];
dtFinal:Z[rowcnt] = Zmat[Zrowcnt, Zcolcnt];
)
)
)
);
dtFinal << Scatterplot 3D(
Y( :X, :Y, :Z ),
Frame3D(
Set Grab Handles( 0 ),
Set Walls( 1 ),
Set Rotation( -54, 0, 38 ),
Set Text Scale( 2 ),
Set Line Scale( 1 ),
Set Marker Transparency( 1 ),
Set Marker Quality( 0.25 ),
Set Marker Scale( 1 ),
Set View Perspective( 0.1 ),
Set View Zoom( 1 )
)
);</YOUR>Re: Trazar diagrama 3DSólo tengo una pregunta más. ¿Hay alguna manera de hacer que este código se ejecute más rápido, porque estoy tratando con una gran cantidad de datos y lleva horas ejecutarlo y, a veces, no es así?
Mi notebook es una Asus, Windows 7, 64 bit, 4GB (RAM) y 197GB de memoria.
Entonces no creo que el problema esté en mi computadora, ¿verdad?
Gracias.
Re: Trazar diagrama 3DMuchas gracias. Eso es exactamente lo que quería hacer y funciona perfectamente.
Re: Trazar diagrama 3DCreé un archivo Excel de muestra, basado en su descripción y lo adjunté a esta entrada.Luego desarrollé el siguiente JSL para leerlo y crear el gráfico 3D de los datos.Espero que esto sea lo que quieres

Names Default To Here( 1 );
// Read in Excel file
dt = Open(
"<YOUR path="" to="" the="" excel="" file="">\example.xlsx",
Worksheets( "example" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 0 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 1 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
);
// Get Y Matrix
Ymat = {};
For( i = 3, i <= N Col( dt ), i++,
If( Column( i )[1] != "",
Ymat = Ymat |/ Matrix( Num( Column( i )[1] ) )
)
);
// Get rid of unrequired cells, and get the X and Z matrices
dt << select rows( [1, 2, 3] );
dt << delete rows;
dt << delete column( 2 );
// Convert all columns to numerics
For( i = 1, i <= N Col( dt ), i++,
Column( dt, i ) << data type( numeric )
);
// Get X matrix
Xmat = Column( dt, 1 ) << get as matrix;
dt << delete column( 1 );
// Get Z matrix
Zmat = dt << get as matrix;
// Create new data table, and output the data
dtFinal = New Table( "Converted", New Column( "X" ), New Column( "Y" ), New Column( "Z" ) );
For( Xcnt = 1, Xcnt <= N Rows( Xmat ), Xcnt++,
For( Ycnt = 1, Ycnt <= N Rows( Ymat ), Ycnt++,
For( Zrowcnt = 1, Zrowcnt <= N Rows( Zmat ), Zrowcnt++,
For( Zcolcnt = 1, Zcolcnt <= N Cols( Zmat ), Zcolcnt++,
dtFinal << Add Rows( 1 );
dtFinal:X[N Rows( dtFinal )] = Xmat[Xcnt];
dtFinal:Y[N Rows( dtFinal )] = Ymat[Ycnt];
dtFinal:Z[N Rows( dtFinal )] = Zmat[Zrowcnt, Zcolcnt];
)
)
)
);
dtFinal << Scatterplot 3D(
Y( :X, :Y, :Z ),
Frame3D(
Set Grab Handles( 0 ),
Set Walls( 1 ),
Set Rotation( -54, 0, 38 ),
Set Text Scale( 2 ),
Set Line Scale( 1 ),
Set Marker Transparency( 1 ),
Set Marker Quality( 0.25 ),
Set Marker Scale( 1 ),
Set View Perspective( 0.1 ),
Set View Zoom( 1 )
)
);</YOUR>
Asegúrese de cambiar la ruta en el JSL para que apunte al lugar donde guarde el archivo Excel adjunto.
Re: Trazar diagrama 3DGracias por responder. Te mostraré cómo se ven mis datos en Excel:
| | Y | 4,15815757 | 10,5410784 | 14,6453847 | 19,762652 | 29,5884633 | 40,1035851 | 52,7727379 | 64,5664014 | 71,6339866 | 80,1791963 | 92,5639742 | 108,325272 | 114,711013 | 121,815695 | 142,186092 | 160,139901 | 175,938007 | 189,208612 | 200,409857 | 209,675249 | 221,03791 | 241,182479 | 256,870356 |
| X | | Z1 | Z2 | Z3 | Z4 | Z5 | Z6 | Z7 | Z8 | Z9 | Z10 | Z11 | Z12 | Z13 | Z14 | Z15 | Z16 | Z17 | Z18 | Z19 | Z20 | Z21 | Z22 | Z23 |
| 0 | | | | | | | | | | | | | | | | | | | | | | | | |
| -3,8225E-05 | | 0,04740562 | 0,09242527 | 0,23259929 | 1,38211141 | 2,04180178 | 3,06816231 | 0,27673071 | 0,08808252 | 0,85756483 | 0,11511972 | 0,39746555 | 0,22290737 | 0,06869082 | 0,48405979 | 1,49275933 | 0,64964997 | 0,85255862 | 2,7009082 | 0,92420938 | 0,07121721 | 20,393539 | 12,7535737 | 2,59458619 |
| 0,00032384 | | 0,13448339 | 0,34250103 | 0,37990033 | 0,38410363 | 1,70627509 | 0,89349347 | 0,42177943 | 0,20623338 | 1,51917679 | 0,26283727 | 0,68063752 | 0,75284843 | 0,10052593 | 0,3008461 | 0,98138204 | 1,02336837 | 0,31897393 | 1,47302568 | 0,78544606 | 0,1680408 | 0,3350895 | 1,47171341 | 7,46166212 |
A continuación puede ver cómo se ven mis datos en la forma X,Y,Z pero tengo 23 puntos de Y y cientos de filas.
| y | y1 | y2 | y3 | y4 |
| x1 | z11 | z21 | z31 | z41 |
| x2 | z12 | z22 | z32 | z42 |
Me gustaría mostrar las coordenadas en un gráfico 3D.
Ese es el problema, porque para mostrarles en una tabla XYZ, tengo que expandir esta matriz. Por ejemplo:
| x1 | y1 | z11 |
| x1 | y1 | z12 |
| x1 | y1 | z13 |
| | | |
| x1 | y2 | z21 |
| x1 | y2 | z22 |
| x1 | y2 | z23 |
Etcétera.. Pero no tengo idea de cómo hacer esto en JMP y trazarlo. Sé que hay una forma automática de hacer esto usando Origin, pero necesito hacerlo usando JMP. ¿Podrías entender lo que quiero decir?
Gracias.
Re: Trazar diagrama 3DEs necesario hacer más explicaciones sobre sus datos.
¿Espera que todos los datos se muestren en un gráfico, o cada columna Z, Z2, Z2, etc. indica que se realizará un gráfico separado?
Dado que cada punto mostrado en un gráfico 3D está definido por las 3 dimensiones, ¿puede mostrar cómo se mostrarían sus valores en la tabla mostrada si la tabla tuviera la forma de
Re: Trazar diagrama 3DGeneralmente, las plataformas JMP esperan que los valores de cada variable (en este caso, 'x', 'y' y 'z') estén en su propia columna. Entonces para tus datos creo que esto sería:

Luego podrías intentar, por ejemplo, 'Gráficos > Diagrama de dispersión 3D '.
También puede utilizar JMP para reorganizar los datos en esta forma, ya sea a mano o mediante un script. Pero los detalles dependerán exactamente de cómo los lea desde Excel.