¿Se puede utilizar JSL para automatizar el trazado de gráficos y la adición de líneas de referencia, entre otros?Hola,
Trazo gráficos de distribución con regularidad.Algunos días obtengo solo unas pocas columnas de datos, otros días bastante más.
Una vez que se generan los gráficos individuales, tendré que ajustar sus respectivos ejes Y mínimo/máximo para facilitar la lectura y luego agregar un par de líneas de referencia (básicamente líneas USL y LSL).Después de un tiempo, se vuelve tedioso, especialmente cuando hay muchas columnas de datos.
Me gustaría ver si hay alguna forma de automatizar este proceso, ya que el proceso en sí es relativamente sencillo y repetitivo. Estoy pensando que las secuencias de comandos JSL pueden ser la solución aquí (soy muy nuevo en las secuencias de comandos).
Esto es lo que me gustaría que hiciera el script:
1. Cada columna de datos consta de 5 puntos de datos, y la primera y segunda fila contienen el USL y el LSL respectivamente.
2. El script debe leer todas las columnas de datos.
3. Trazar gráficos de distribución individuales para todos los datos.
4. Agregue líneas de referencia USL y LSL (¿podemos establecer el grosor y el color de la línea aquí?)
5. Luego cambie el Min del eje Y a LSL-0.003 y el Max del eje Y a USL a USL+0.003
¿Puede JSL hacer lo anterior?
¡Gracias!
Automatización y secuencias de comandosRe: ¿Se puede utilizar JSL para automatizar el trazado de gráficos y la adición de líneas de referencia, entre otros?Respuesta corta: JSL puede hacer eso.
Re: ¿Se puede utilizar JSL para automatizar el trazado de gráficos y la adición de líneas de referencia, entre otros?- Bienvenido a la comunidad
- Sí, un script JMP puede realizar fácilmente las tareas que usted describió.
- JMP mostrará automáticamente sus valores USL y LSL en cada uno de los gráficos.Sin embargo, la estructura de datos que ha descrito no es una estructura normal para JMP.Es bastante sencillo agregar a un script el JSL para tomar los datos USL y LSL y moverlos a la propiedad de la columna Límites de especificación para cada columna y luego eliminar las primeras 2 filas de sus datos.
- La descripción de sus datos parece indicar que solo tiene 3 puntos de datos para cada columna de datos.(5 puntos de datos menos las filas LSL y USL) y a partir de ahí traza los gráficos de distribución.Usando la terminología JMP, un gráfico de distribución es una visualización de histograma.¿Es esto lo que estás especificando como el gráfico que necesitas?Si es así, ¿cómo se crea este gráfico a partir de 3 puntos de datos?
- Cambiar los valores mínimo y máximo del eje es muy fácil y se puede agregar al script.
- Mi interpretación de lo que describiste en tu entrada inicial puede ser totalmente errónea.Sería bueno si pudiera proporcionar una muestra de los datos que está utilizando y una ilustración del gráfico que debe mostrar.
- Le sugiero que se tome el tiempo de revisar el documento Descubriendo JMP disponible en el menú desplegable Ayuda de JMP.
Re: ¿Se puede utilizar JSL para automatizar el trazado de gráficos y la adición de líneas de referencia, entre otros?Gracias por su respuesta.
Para el punto 4, lamento no haberme explicado bien. Para ser claros, habrá 7 filas de datos en cada columna. La primera fila es la LSL y la segunda fila es la USL. Las filas 3 a 7 son los datos reales.
Para la parte 6, aquí están mis datos de muestra y los gráficos resultantes:


Para el gráfico de este ejemplo, también se trazan la primera y la segunda fila de datos, lo cual no quiero. Son la LSL y la USL respectivamente. Lo que hago normalmente es que no incluyo el LSL y el USL en los datos.
Re: ¿Se puede utilizar JSL para automatizar el trazado de gráficos y la adición de líneas de referencia, entre otros?Aquí hay un script de ejemplo que produce lo que desea.

Names Default To Here( 1 );
// Create the data table
// dt = open( "<PATH to="" the="" file="" that="" has="" the="" data="https://community.jmp.com/">" );
// Here is the sample data table you provided
dt = New Table( "Example",
Add Rows( 7 ),
New Column( "Data1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [9.5, 10.5, 10, 10.2, 9.7, 9.6, 10.4] )
),
New Column( "Data2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [4.5, 5.5, 5, 5.1, 5.2, 4.9, 4.7] )
)
);
// Ge all of the numeric column's names
colNameList = dt << get column names( string, continuous );
//Take the data from rows 1 & 2 and create the Spec Limints column property
For Each( {col}, colNameList,
Eval(
Substitute(
Expr(
Column( dt, col ) << set property(
"Spec Limits",
{LSL( _LSL_ ), USL( _USL_ ), Show Limits( 1 )}
)
),
Expr( _LSL_ ), As Column( dt, col )[1],
Expr( _USL_ ), As Column( dt, col )[2]
)
)
);
// Exclude and Hide row 1 & 2 to eliminate them from Distributions
dt << Select rows( {1,2} );
dt << hide and exclude;
// Run the Distribution Platform, having the Spec Limits as
// Column Properties, will insure the proper Min and Max for
// the Y axis
dt << Distribution( column( eval(colNameList) ));</PATH>Re: ¿Se puede utilizar JSL para automatizar el trazado de gráficos y la adición de líneas de referencia, entre otros?Oh, vaya.. Ciertamente no esperaba que escribieras el guión. ¡Gracias!
Vi que la parte frontal del script trata sobre la creación de la tabla de datos de ejemplo que proporcioné anteriormente. ¿Cómo lo modifico para poder pedirle al script que apunte a una tabla de datos existente de mi elección (supongo que es el archivo .jmp) y luego ejecutarlo?
Re: ¿Se puede utilizar JSL para automatizar el trazado de gráficos y la adición de líneas de referencia, entre otros?Abriendo la mesa: Guía de secuencias de comandos > Tablas de datos > Introducción a las tablas de datos (usar Abierto() )
Obteniendo ruta de la selección del usuario Seleccionar archivo()
Re: ¿Se puede utilizar JSL para automatizar el trazado de gráficos y la adición de líneas de referencia, entre otros?Mi opinión es que tengo que incorporar el otro conjunto de código que ayudaste a responder en mi otro hilo:
If( Is Missing( fn ),
throw(),
// Else Open the selected file
Open( fn )
);
Supongo que después de abrir el archivo, necesito cargarlo como una tabla de datos. ¿Qué significa usar la sintaxis dt?
Re: ¿Se puede utilizar JSL para automatizar el trazado de gráficos y la adición de líneas de referencia, entre otros?Utiliza Open() para abrir la tabla de datos, open luego devuelve una referencia a la tabla de datos (si logra abrir el archivo) que se abrió y luego se almacena en la variable dt
dt = Open("myfile.jmp");Re: ¿Se puede utilizar JSL para automatizar el trazado de gráficos y la adición de líneas de referencia, entre otros?Modifiqué el script compartido anteriormente por uno de los contribuyentes (gracias) para que el usuario pueda elegir qué archivo de datos (.jmp) abrir:
Names Default To Here( 1 );
// Open a dialog to choose a .jmp file to open
// Get the filename of the .jmp file to open
dt = Pick File("Select a .jmp file to open", "", {"JMP Files|jmp;jsl;jrn", "All Files|*"}, 1, 0, "");
// If the user did not select a file, exit the script
If( Is Missing( dt ),
Throw(),
// Else Open the selected file
Open( dt )
);
// Get all of the numeric column's names
colNameList = dt << get column names( string, continuous );
// Take the data from rows 1 & 2 and create the Spec Limits column property
For Each( {col}, colNameList,
Eval(
Substitute(
Expr(
Column( dt, col ) << set property(
"Spec Limits",
{LSL( _LSL_ ), USL( _USL_ ), Show Limits( 1 )}
)
),
Expr( _LSL_ ), As Column( dt, col )[1],
Expr( _USL_ ), As Column( dt, col )[2]
)
)
);
// Exclude and Hide row 1 & 2 to eliminate them from Distributions
dt << Select rows( {1,2} );
dt << hide and exclude;
// Run the Distribution Platform
dt << Distribution( column( eval(colNameList) ));Al ejecutar el script, me encontré con el siguiente error:
Enviar espera objeto programable en el acceso o evaluación de 'Enviar', dt << /*###*/obtener nombres de columnas (cadena, continua) /*###*/
Parecía que había un problema con dt << ¿obtener nombres de columnas?
Re: ¿Se puede utilizar JSL para automatizar el trazado de gráficos y la adición de líneas de referencia, entre otros?Tiene dt como ruta del archivo, por lo que es una cadena. Debe hacer que haga referencia al archivo recién abierto, como se muestra a continuación. Observe la declaración Open()
Names Default To Here( 1 );
// Open a dialog to choose a .jmp file to open
// Get the filename of the .jmp file to open
dt = Pick File("Select a .jmp file to open", "", {"JMP Files|jmp;jsl;jrn", "All Files|*"}, 1, 0, "");
// If the user did not select a file, exit the script
If( Is Missing( dt ),
Throw(),
// Else Open the selected file
dt = Open( dt )
);
// Get all of the numeric column's names
colNameList = dt << get column names( string, continuous );
// Take the data from rows 1 & 2 and create the Spec Limits column property
For Each( {col}, colNameList,
Eval(
Substitute(
Expr(
Column( dt, col ) << set property(
"Spec Limits",
{LSL( _LSL_ ), USL( _USL_ ), Show Limits( 1 )}
)
),
Expr( _LSL_ ), As Column( dt, col )[1],
Expr( _USL_ ), As Column( dt, col )[2]
)
)
);
// Exclude and Hide row 1 & 2 to eliminate them from Distributions
dt << Select rows( {1,2} );
dt << hide and exclude;
// Run the Distribution Platform
dt << Distribution( column( eval(colNameList) ));Re: ¿Se puede utilizar JSL para automatizar el trazado de gráficos y la adición de líneas de referencia, entre otros?Movido a un hilo nuevo con un título más relevante.
Re: ¿Se puede utilizar JSL para automatizar el trazado de gráficos y la adición de líneas de referencia, entre otros?Este código es un poco más limpio:
// Get the filename of the .jmp file to open
filename = Pick File("Select a .jmp file to open", "", {"JMP Files|jmp;jsl;jrn", "All Files|*"}, 1, 0, "");
// If the user did not select a file, exit the script
If( Is Missing( filename ),
Throw(),
// Else Open the selected file
dt = Open( filename )
);