El objetivo aquí es guardar una serie de gráficos de control (o cualquier otro informe) como un archivo de gráficos que se puede usar en otro lugar.
Por ejemplo, tengo una plataforma de diapositivas de PowerPoint con 10 gráficos de control. Todos los lunes necesito actualizar los gráficos de control en la plataforma de diapositivas. Podría hacer los gráficos en JMP y luego copiarlos y pegarlos en la plataforma cada semana, o podría aprovechar la función Insertar y vincular disponible en la mayoría de los productos de MS.

Para hacer esto, podría hacer el gráfico de control, guardarlo como figure1.png, luego abrir PowerPoint donde insertaría la imagen usando la opción "insertar y vincular" (pequeña flecha hacia abajo en el botón Insertar). Haría esto para cada una de las 10 diapositivas. La próxima semana haría cada gráfico de control y guardaría cada uno en un archivo gráfico (es decir, figura1.png, figura2.png...). Luego, cuando abro la plataforma de diapositivas en PowerPoint, la nueva versión de figure1.png, etc., sería arrastrada a la plataforma.
¿Suena tedioso? Sí, eso sería horrible, sería más fácil simplemente guardar los 10 gráficos como un archivo de PowerPoint en JMP y copiar y pegar los gráficos. ¡Sin embargo! Con un poco de JSL, todo esto se vuelve realmente fácil y te mostraré cómo hacerlo.
Antes de comenzar, veamos un script simple para hacer un gráfico de control y entender qué está pasando:
Tabla de control ( Tamaño del grupo( 1 ), Columna del gráfico ( :Métrica 1, Medida individual ))
Vamos a despegar esto aparte:
La capa más externa es Tabla de control() , y dentro de esa capa hay dos partes, Tamaño del grupo(1) , y Columna del gráfico() .
Cada uno de los elementos tiene argumentos, por ejemplo, Group Size tiene un argumento, "1". Chart Col() tiene dos argumentos. El primero es una referencia de columna y el tipo de gráfica de control a realizar con esa columna. Conceptualmente, hay capas de funciones, y una forma de escribir es construir su "cebolla" de adentro hacia afuera.
Probablemente hay 100 y 1 formas de escribir este script, y algunas pueden ser más fáciles y menos detalladas que lo que voy a hacer aquí. El enfoque que estoy usando aquí tiende a funcionar con casi todas las plataformas en JMP, pero requiere una forma un poco diferente de pensar acerca de las secuencias de comandos... secuencias de comandos de adentro hacia afuera.
1. lista={}; aquí es donde proporciono una lista de nombres de columna a partir de los cuales quiero hacer gráficos de control. Un ejemplo más complejo podría tener un cuadro de diálogo que se usa para generar la lista, o tal vez un filtro lógico para seleccionar columnas continuas de una tabla, pero eso es para otra publicación de blog.
2. a=expr(); Aquí solo estoy tomando cada una de las funciones utilizadas en el gráfico de control y definiéndolas pero dejándolas vacías.
a=expr(gráfico de control()); me da un lugar para poner argumentos. b=expr(tamaño del grupo(1)); es un elemento que voy a insertar en Tabla de control( ) , y c=expr(columna del gráfico(... también se va a insertar en "a". El " expresión( ) Es importante entender la función. Lo que haya dentro no se evalúa, no se "lee" ni se convierte en algo. por ejemplo si Hablar ( "Hola" ); estuvieran en su guión, JMP diría "hola", pero si s=expr( Hablar ( "Hola" ) ); estuvieran en su secuencia de comandos, no sucedería nada hasta que evaluara "s" o escribiera explícitamente, eval(s). (más concretamente, si "s;" estuviera en una línea de su código, JMP lo evaluaría y diría "hola"). Aquí estoy usando expresión( ) para aferrarme a las partes que quiero usar más tarde.
3. Insertar en (c, alista[i],1); Aquí, "c" es un argumento no evaluado, chartcol (medida individual).Insertar en, inserta lo primero en la variable de lista "alist" en el contenido de "c". Entonces ahora c es chartcol(:Métrica 1, medida individual).
Este es un buen lugar para dar un paso atrás y explicar de dónde viene la "i" en "alist[i]".
Para (i=1, i<=nielementos(alista), i++ es el comienzo de un For Next Loop, o Para este conjunto de condiciones, siga haciendo esto hasta que la condición no sea verdadera. Entonces, i=1, y mientras i sea menor o igual que el número de cosas en "alist", haz lo siguiente. La variable "i" aumenta en uno en cada ciclo, y podemos usar esta variable de contador para otras cosas en el ciclo. En el primer bucle, i=1, lo usamos para obtener lo primero en "alist" diciendo "alist, subíndice, i". Más adelante en el script vamos a usar i en el nombre del archivo que guardamos. Quiero una lista serial de nombres de archivos (figura1, figura2, figura3...) Para obtener esto, concateno el prefijo con I. Excepto que hay un problema, no podemos concatenar un número, así que tenemos que decir " ruta/figura"||char(i)||".png "el número i tiene que estar envuelto en carcter( ) , luego, como carácter, se puede concatenar con otros caracteres. (cosas entre comillas).
4. obj=evaluar(a); En este punto del guión, el tabla de control() La función ha sido empaquetada con todos los argumentos que necesito y es hora de evaluarla. Tenga en cuenta que "obj", una variable, se puede usar como un "mango" para hablar con el gráfico de control que se acaba de generar.
5. obj< este último paso guarda el contenido de obj como un archivo de imagen png. tenga en cuenta que el nombre del archivo tiene una extensión .png y, justo después del nombre del archivo, el siguiente argumento es "png". Esto significa que es posible guardar un archivo con una extensión .gif pero como un tipo de archivo .png. te lo recomiendo mucho no no coincide con la extensión y el tipo de archivo.
6. obj< Esto es solo limpiar. Si quisiera ver los informes de JMP que realizó, entonces esto estaría comentado.
7. El bit final es ");" este es el paréntesis de cierre para el principio For(. En la práctica, cuando esté codificando, es una buena idea dejarse un comentario al final del bucle, algo así como "//fin del bucle i". Esto es especialmente importante si está iterando dentro de otros bucles. , ayuda a evitar que las cosas se vuelvan locas.
alist={:Metric 1, :Metric 2, :Metric 3};
for(i=1, i<=nitems(alist), i++,
a=expr(control chart());
b=expr(group size(1));
c=expr(chart col(individual measurement));
insert into(c,alist[i],1);
insert into(a,nameexpr(b));
insert into(a,nameexpr(c));
obj=eval(a);
obj<< Save Picture( "/Users/bywing/Byron Wingerd/Examples/example"||char(i)||".png", "png" );<BR /> obj<< Close Window;
);