Líneas de eventos y comentarios en gráficos de control
¿Anotar gráficos de control con eventos conocidos? Continuamente me encuentro con situaciones en las que necesito agregar líneas de eventos a un gráfico. Estas son distintas de las fases porque no necesito volver a calcular la media y los límites de control, solo necesito un marcador para mostrar que algo sucedió. También hay casos en los que necesito etiquetar puntos en un gráfico de una manera conveniente y automatizada. Este blog cubre un par de scripts que se pueden agregar para controlar gráficos de cuadros que facilitan dibujar líneas de eventos y agregar comentarios a los gráficos.

El primer paso para personalizar un gráfico es hacer clic derecho dentro del gráfico y seleccionar personalizar, y aparecerá el cuadro de diálogo Personalizar gráfico. Al hacer clic en el ícono “+” en la parte superior izquierda, se abrirá un script en blanco y aquí es donde puede pegar los ejemplos que se analizan a continuación.Este primer ejemplo requiere que tenga una columna de caracteres llamada "Comentario" en su tabla. Cuando hay un valor en esta columna, se dibujará una línea vertical en su gráfico como en el ejemplo anterior.

El segundo paso es mirar un par de scripts personalizados que se pueden agregar a esta ventana. Cada conjunto de instrucciones o argumentos debe ir pegado con un punto y coma. Un buen lugar para aprender cómo utilizar estos scripts personalizados en gráficos es el menú desplegable Muestras y plantillas en la ventana de diálogo. Además, el Índice de secuencias de comandos, en la pestaña Ayuda, tenía detalles sobre cada una de las funciones. Tenga en cuenta que esta pequeña ventana de secuencia de comandos es algo limitada, por lo que después de aplicar los cambios, considere guardar la secuencia de comandos del informe en la ventana de secuencia de comandos para continuar con la edición. Todos los scripts personalizados que se agregan al gráfico también aparecerán en el script de objetos del informe. Este cuadro de diálogo facilita la adición al gráfico sin tener que saber mucho de JSL y cómo manipular el script del objeto de informe.
Script de gráfico personalizado 1: agregar una línea
For Each Row( If( Is Missing( :Comment ) == 0, V Line( row() ) ) );
Explicación:
- Para cada fila(): esto hace que la fórmula se evalúe en cada fila en lugar de a nivel de columna.
- Falta(): esta función devuelve un “0” si la fila está vacía y un “1” si no lo está. Si no falta la fila (es decir, = “0”), entonces se evalúa la línea V y se dibuja una línea.
- V Line(): consulte el índice de secuencias de comandos de este, hay muchas opciones interesantes para usar. En este caso, solo le doy un número, por lo que dibujará una línea vertical a lo largo de todo el cuadro en ese número. (no hay ningún número ¿verdad?)
- Fila(): esta función devuelve el número de fila. Estoy usando este número de fila como el lugar donde se dibuja la línea vertical a través del marco.
Script de gráfico personalizado 2: agregar etiquetas a las líneas
For Each Row( If( Is Missing( :Comment ) == 0, Text( Right Justified, {row(),
Col Maximum( :Data ) * 1.2},:Comment)));
Explicación:
- Para cada fila(): esto hace que la fórmula se evalúe en cada fila en lugar de a nivel de columna.
- If(): esta es una función clásica "Si, entonces, si no". Si la condición es verdadera, haga lo primero o haga lo segundo. Excepto que aquí no hay "más", por lo que si la condición es verdadera, entonces sucede lo primero o no sucede nada.
- Falta(): esta función devuelve un “0” si la fila está vacía y un “1” si no lo está. Aquí, si falta la fila, no sucede nada, pero si no falta, se evalúa la función de texto.
- Texto(): Nuevamente, verifique el índice de secuencias de comandos para ver todos los argumentos que se pueden incluir aquí, así como un par de buenos ejemplos. Aquí vamos a poner el texto en las coordenadas Y y X, y el texto está en la columna: Comentario.
- Row() es la posición x y la posición y es el máximo (Col Maximum()) de la columna :Data multiplicada por 1,2. Esto hace que el texto aparezca un poco por encima de los puntos de datos.
Script de gráfico personalizado 3: agregar etiquetas a los puntos de datos.
Probablemente sea mejor y más fácil usar las propiedades de columna y fila para etiquetar los puntos de datos, pero en algunos casos una solución escrita como esta es aceptablemente compleja.
For Each Row(If( Is Missing( :Note ) == 0, If( :Data <= Col Mean( :Data ),
Text( Right Justified,{Row(),:Data-:Data*1.1}, :Note ),
Text( Right Justified,{Row(),:Data * 1.1}, :Note ))));
Explicación:
- Esto se vuelve un poco sofisticado. En esta expresión hay una declaración If anidada. Si no falta la Nota y :Data es menor o igual que la media de la columna de :Data, entonces haga que el texto en :Note esté debajo del punto de datos, o haga que el texto en :Note esté encima del punto de datos.
- Se ve mejor en el gráfico de esta manera, pero en este ejemplo comienza a parecer un poco más complicado de lo necesario.
- Una versión más simple se vería así:
For Each Row(If( Is Missing( :Note ) == 0, Text( Right Justified,{Row()+1,:Data}, :Note );
La “fila()+1” mueve el texto a la derecha del punto de datos
Ejemplo de secuencia de comandos de gráfico de control
La tabla para este script debe tener las siguientes columnas. Se adjunta una tabla de ejemplo.
- ID, números de fila secuenciales
- Datos, una columna con tus datos para tendencia
- Comentarios, una columna de comentarios escasamente poblada para líneas verticales
- Notas, una columna de notas escasamente poblada para puntos de datos específicos
Este script genera el gráfico de control en la figura anterior.
Control Chart(
Sample Label( :ID ),
Group Size( 1 ),
KSigma( 3 ),
Chart Col( :Data, Individual Measurement ),
SendToReport(
Dispatch(
{"Individual Measurement of Data"},
"IR Chart of IM",
FrameBox,
{Frame Size( 800, 200 ), Add Graphics Script(
1,
Description( "Script" ),
For Each Row( If( Is Missing( :Comment ) == 0, V Line( Row() ) ) );
For Each Row(
If( Is Missing( :Comment ) == 0,
Text( Right Justified, {Row(), Col Maximum( :Data ) * 1.2},:Comment ))
);
For Each Row(
If( Is Missing( :Note ) == 0,
If( :Data <= Col Mean( :Data ),
Text( Right Justified,{Row(),:Data-:Data*1.1}, :Note ),
Text( Right Justified,{Row(),:Data * 1.1}, :Note )))
);
), Grid Line Order( 2 ), Reference Line Order( 3 )}
),
Dispatch( {"Individual Measurement of Data"}, "IR Chart of IM", FrameBox( 2 ),
{Frame Size( 72,200)})))
1. Sí, ¿qué añadirías?
2. Estoy seguro de que hay una manera de hacerlo indirectamente. Creo que hay una manera de consultar qué columnas se utilizaron para realizar un informe y capturar el nombre de la columna de esa manera. Luego agregue el script personalizado al gráfico con una referencia a la columna de datos.
2. Sería más fácil si estuviera iterando a través de una lista de variables y luego incluyera la referencia a la columna actual en el script personalizado.
Hola Byron, otra cosa (¡¡2 en realidad!!) es posible agregar una línea de etiqueta para "Custom Graph Script 3: Agregar etiquetas a los puntos de datos". ¿Existe algún método de secuencia de comandos en el que no sea necesario nombrar exactamente el eje y (por ejemplo, ":Datos"), pero el nombre predeterminado es el nombre de la columna?
Saludos Ian
Perfecto, funciona, muy feliz, saludos.
ian,
No estoy seguro de qué está causando que esto suceda (aún no hay suficiente café), pero esto lo solucionará.
Este es el script en el menú de personalización.
For Each Row( If( Is Missing( :Comment ) == 0, V Line( row()-1 ) ) );
For Each Row(
If( Is Missing( :Comment ) == 0,
Text( Right Justified, { row()-1, Col Maximum( :Data ) * 1.2}, :Comment )
)
);
Sustituí la columna :ID por fila()-1, para usar el número de fila para la ubicación, y luego lo cambié uno hacia atrás.
Hola Byron,
Intenté copiar el script en el generador de gráficos SPC.
Te he enviado un enlace para el archivo y tengo los siguientes comentarios.
1_Gráfico de control por ID: este es su gráfico de control que no ha cambiado; todo está bien

2_Gráfico de control por ID y generador de gráficos de control: este es el script de (n.º 1) copiado en el generador de gráficos; las líneas verticales están desplazadas en un lugar en el eje x; consulte las dos primeras causas especiales
Generador de gráficos de control

3_Gráfico de control por ID y creador de gráficos de control AS Numérico/Continuo: si cambio el ID de Numérico/Ordinal a Numérico/Continuo, entonces todo está bien

4_Gráfico de control por ID y creador de gráficos de control AS Numérico/Continuo Alfa/numérico): Pero quiero trazar en el eje x el número de lote alfa/numérico, se descompone nuevamente

Me está volviendo loco. ¿Puedes ayudarme? Te envío la ubicación del archivo.
https://1drv.ms/u/s!Au2FkmkZvSi-sA8j_g625J1VFdtw?e=0UPtz6
Saludos Ian