Cómo congelar la visualización del gráfico de control cuando se actualizan los datosHola,
Tengo un script que lee un archivo csv y controla el gráfico. Me gusta automatizar este proceso para que se actualicen nuevos datos, el gráfico de control no genera nuevos gráficos. Me gusta ver solo en el gráfico con datos actualizados.
Aquí está el script que usé. Aprecio tu ayuda. Gracias
------------------
Nombres predeterminados hasta aquí ( 1 );
dt = Abierto (
"/Usuarios/adatorab/Documentos/JMP/PASS.csv" ,invisible);
obj = dt <<
Generador de gráficos de control (
Variables( Y( :A ) ),
Cuadro (
Posición( 1 ),
Puntos(
Estadística(
"Individual"
)
),
Límites(
Sigma(
"Rango móvil"
)
)
),
Cuadro (
Posición( 2 ),
Puntos(
Estadística(
"Rango móvil"
)
),
Límites(
Sigma(
"Rango móvil"
)
)
)
);
objeto << Mostrar ventana ( 0 );
ahora = Nueva ventana ( "Tabla de control" );
ahora << Adjuntar (( Cuadro de lista H ((obj << Informe ) << Caja de clones )));
Re: Cómo congelar la visualización del gráfico de control cuando se actualizan los datosMuchas gracias por su ayuda.
Re: Cómo congelar la visualización del gráfico de control cuando se actualizan los datosCopié el código del gráfico de control de Bryon en el suyo, agregué un tiempo 'min' aleatorio y esto es lo que veo:
//Open a window to show a control chart and then update
//the chart every 15 seconds
//Includes a button to refresh early.
Names Default To Here( 1 );
//Define variables here that need to keep their values through subsequent function calls
//This includes the window and data table
//Open a window to hold the chart (note this only happens once)
nw = New Window( "Control Chart",
V List Box(
Button Box( "New Data", UpdateData() ),
holder = H List Box();
)
);
//Make a variable to hold a reference to the data table
dt = .;
//A function that will update the chart
UpdateData = Function( {},
//Close the table if it is already open
Try( dt << Close Window );
//Open data table
dt = Open( "$SAMPLE_DATA/Abrasion.jmp", Private );
//Make the control chart
obj = dt << Control Chart(
Group Size( 1 ),
KSigma( 3 ),
Chart Col( :Abrasion, Individual Measurement ),
SendToReport(
Dispatch(
{"Individual Measurement of Abrasion"},
"1",
ScaleBox,
{Min( nrows() - Floor( Random Uniform( 10, 25 ) ) ), Max( nrows() + 2 ), Inc( 5 ),
Minor Ticks( 1 )}
)
)
);
//Hide the temporary control chart window
obj << ShowWindow( 0 );
//Remove existing/old graph from the window (if there is one)
Try( (holder << Child) << Delete );
//Add the new graph
holder << Append( (H List Box( (obj << Report) << Clone Box )) );
//Close the temporary control chart
obj << Close Window;
);
//Script to update then chart and then call itself 15 seconds later
quickieScript = Expr(
//Load the chart in the window (run the script in the function)
UpdateData();
//Run this same script in 5 seconds
Schedule( 5, quickieScript );
);
//Start things off:
quickieScript;Re: Cómo congelar la visualización del gráfico de control cuando se actualizan los datosparece que tiene un informe del generador de gráficos de control. Los gráficos de control clásicos funcionan un poco diferente. (más fácil)
Re: Cómo congelar la visualización del gráfico de control cuando se actualizan los datosGracias. Intenté esto y no obtengo ningún error, pero no veo el eje x solo veinte puntos.
¿Puedes ayudar más? Lo aprecio mucho.
//Abrir una ventana para mostrar un gráfico de control y luego actualizar
//el gráfico cada 15 segundos
//Incluye un botón para actualizar temprano.
Nombres predeterminados hasta aquí ( 1 );
//Defina variables aquí que necesitan mantener sus valores a través de llamadas de funciones posteriores
//Esto incluye la ventana y la tabla de datos
//Abra una ventana para guardar el gráfico (tenga en cuenta que esto solo sucede una vez)
ahora = Nueva ventana ( "Tabla de control" ,
Cuadro de lista V (
Caja de botones ( "Nuevos datos" , Actualizar datos() ),
titular = Cuadro de lista H ();
)
);
//Hacer una variable para contener una referencia a la tabla de datos
dt = . ;
//Una función que actualizará el gráfico
Actualizar datos = Función ({},
//Cierra la tabla si ya está abierta
Intentar ( dt << Cerrar ventana );
//Abrir tabla de datos
dt = Abierto ( "$SAMPLE_DATA/Abrasión.jmp" , Privado );
//Hacer el gráfico de control
obj = dt << Generador de gráficos de control (
Mostrar dos gráficos de Shewhart ( 0 ),
Mostrar panel de control( 0 ),
Mostrar capacidad ( 0 ),
Variables( Y( :Abrasión ) ),
Cuadro (
Puntos( Estadística( "Individual" ) ),
Límites (Sigma (rango móvil)),
//Advertencias( Prueba 1( 1 ) )
Enviar a informe (
Despacho(
{ "Medición individual de la abrasión" },
"1" ,
caja de escala,
{ mínimo ( filas ()- 20 ), máx. ( filas ()+ 2 ), Cª( 5 ),
Garrapatas menores ( 1 )}
)
)
)
);
//Ocultar la ventana del gráfico de control temporal
objeto << Mostrar ventana ( 0 );
//Eliminar gráfico existente/antiguo de la ventana (si hay uno)
Intentar ((titular << Niño ) << Borrar );
//Espere un momento para mostrar cuando se actualice el gráfico
Esperar ( 0.2 );
//Añadir el nuevo gráfico
titular << Adjuntar ( ( Cuadro de lista H ((obj << Informe ) << Caja de clones )) );
//Cerrar el gráfico de control temporal
objeto << Cerrar ventana ;
);
// Script para actualizar luego el gráfico y luego llamarse a sí mismo 15 segundos después
guion rapidito = exp. (
//Cargar el gráfico en la ventana (ejecutar el script en la función)
Actualizar datos();
//Ejecutar este mismo script en 15 segundos
Cronograma ( 15 , QuickieScript);
);
//Comenzar las cosas:
guión rápido;
Re: Cómo congelar la visualización del gráfico de control cuando se actualizan los datosEste es un script de gráfico de control para ejecutar contra Abrasion.jmp
Control Chart(
Group Size( 1 ),
KSigma( 3 ),
Chart Col( :Abrasion, Individual Measurement ),
SendToReport(
Dispatch(
{"Individual Measurement of Abrasion"},
"1",
ScaleBox,
{Min( nrows()-25 ), Max( nrows()+2 ), Inc( 5 ),
Minor Ticks( 1 )}
)
)
);
Utiliza la plataforma clásica de gráficos de control.
Re: Cómo congelar la visualización del gráfico de control cuando se actualizan los datosGracias por tus sugerencias. Creo que esa fue mi segunda pregunta. ¿Dónde inserto su guión en el guión original (arriba).
Re: Cómo congelar la visualización del gráfico de control cuando se actualizan los datosMuchas gracias. Esto resolvió mi problema.
Re: Cómo congelar la visualización del gráfico de control cuando se actualizan los datos¿El problema es que solo desea ver los datos más recientes en el gráfico de control?
Me he encontrado con algunos escenarios donde los datos se actualizan en alguna tabla. Cada vez que tomo una copia de la tabla, solo quiero ver las últimas 50 filas, independientemente de cuántas filas haya en la tabla.
Esto es bastante fácil de configurar. Simplemente haga un gráfico de control y ajuste el eje x. Luego mire la secuencia de comandos del gráfico de control y encuentre la parte que se parece a la secuencia de comandos a continuación.
SendToReport(
Dispatch(
{"Individual Measurement of Metric 1"},
"1",
ScaleBox,
{Min( nrows()-50), Max( nrows()+2 ), Inc( 5 ),
Minor Ticks( 0 )}
),
Donde dice Min( y Max(, edite los valores en el script original. Reemplace el número en min() con filas()-50 y reemplace el número en max() con nfilas()+2.
Ahora, si hace todo lo elegante, elimina y agrega cosas, obtendrá un gráfico de control con los datos más actualizados.
Re: Cómo congelar la visualización del gráfico de control cuando se actualizan los datosAhora creo que entiendo.El problema es que está abriendo una nueva ventana cada vez que se ejecuta el script.Al comienzo de cada actualización, desea cerrar la última ventana o actualizar la misma ventana con un nuevo gráfico.A continuación se muestra un ejemplo de este último.
A menudo escribo 'pseudocódigo' en los comentarios antes de escribir cualquier código real, creo que eso ayuda a asegurarme de que el código realmente haga lo que espero.Luego, una vez que todo el flujo de trabajo tiene sentido, completo el código para hacerlo realmente.
//Open a window
//Every 15 Seconds:
//Make a chart with the latest data
//Update the window with a new chart
//Open a window to show a control chart and then update
//the chart every 15 seconds
//Includes a button to refresh early.
Names Default To Here( 1 );
//Define variables here that need to keep their values through subsequent function calls
//This includes the window and data table
//Open a window to hold the chart (note this only happens once)
nw = New Window( "Control Chart",
V List Box(
Button Box( "New Data", UpdateData() ),
holder = H List Box();
)
);
//Make a variable to hold a reference to the data table
dt = .;
//A function that will update the chart
UpdateData = Function( {},
//Close the table if it is already open
Try( dt << Close Window );
//Open data table
dt = Open( "$SAMPLE_DATA/Abrasion.jmp", Private );
//Make the control chart
obj = dt << Control Chart Builder(
Variables( Y( :Abrasion ) ),
Chart(
Position( 1 ),
Points( Statistic( "Individual" ) ),
Limits( Sigma( "Moving Range" ) )
),
Chart(
Position( 2 ),
Points( Statistic( "Moving Range" ) ),
Limits( Sigma( "Moving Range" ) )
)
);
//Hide the temporary control chart window
obj << ShowWindow( 0 );
//Remove existing/old graph from the window (if there is one)
Try( (holder << Child) << Delete );
//Wait a moment to show when the chart updates
Wait(0.2);
//Add the new graph
holder << Append( (H List Box( (obj << Report) << Clone Box )) );
//Close the temporary control chart
obj << Close Window;
);
//Script to update then chart and then call itself 15 seconds later
quickieScript = Expr(
//Load the chart in the window (run the script in the function)
UpdateData();
//Run this same script in 15 seconds
Schedule( 15, quickieScript );
);
//Start things off:
quickieScript;Re: Cómo congelar la visualización del gráfico de control cuando se actualizan los datosLo siento, me perdí las primeras líneas. Aquí está la correcta.
------------
los nombres predeterminados aquí ( 1 );
guion rapidito = exp. (
Cronograma ( 15 , QuickieScript);
//Abrir datos de muestra
dt = Abierto ( "$SAMPLE_DATA/Abrasión.jmp" );
//Una función que actualizará el gráfico
Actualizar datos = función ({},
//Hacer el gráfico de control
obj = dt << Generador de gráficos de control (
Variables( Y( :Abrasión ) ),
Cuadro (
Posición( 1 ),
Puntos( Estadística( "Individual" ) ),
Límites( Sigma( "Rango móvil" ) )
),
Cuadro (
Posición( 2 ),
Puntos( Estadística( "Rango móvil" ) ),
Límites( Sigma( "Rango móvil" ) )
)
);
//Ocultar la ventana del gráfico de control temporal
objeto << Mostrar ventana ( 0 );
//Eliminar gráfico existente/antiguo de la ventana (si hay uno)
Intentar ((titular << Niño ) << Borrar );
//Añadir el nuevo gráfico
titular << Adjuntar (( Cuadro de lista H ((obj << Informe ) << Caja de clones )));
//Cerrar el gráfico de control temporal
objeto << Cerrar ventana ;
);
//Abra una ventana para mostrar el nuevo gráfico de control y un botón para actualizar el gráfico
//Incluye un botón para ejecutar el script anterior.
ahora = Nueva ventana ( "Tabla de control" ,
Cuadro de lista V (
Caja de botones ( "Nuevos datos" , Actualizar datos() ),
titular = Cuadro de lista H ();
)
);
//Cargar el primer gráfico en la ventana (ejecutar el script en la función)
Actualizar datos();
);
guión rápido;
Re: Cómo congelar la visualización del gráfico de control cuando se actualizan los datosGracias. Utilizo el programador de ventanas para ejecutar este script y me gusta ver un gráfico cuando se leen los datos después (digamos 15 segundos más o menos). Obtengo muchos "gráficos de control"). Probé tu ejemplo y lo puse en la tarea de la ventana (también la función Programar) y obtengo muchos "gráficos de control" 1, 2, 3, .. ¿Hay alguna forma de que uno pueda obtener solo en el gráfico?
A continuación se muestra lo que uso. Gracias
//Una función que actualizará el gráfico
Actualizar datos = función ({},
//Hacer el gráfico de control
obj = dt << Generador de gráficos de control (
Variables( Y( :Abrasión ) ),
Cuadro (
Posición( 1 ),
Puntos( Estadística( "Individual" ) ),
Límites( Sigma( "Rango móvil" ) )
),
Cuadro (
Posición( 2 ),
Puntos( Estadística( "Rango móvil" ) ),
Límites( Sigma( "Rango móvil" ) )
)
);
//Ocultar la ventana del gráfico de control temporal
objeto << Mostrar ventana ( 0 );
//Eliminar gráfico existente/antiguo de la ventana (si hay uno)
Intentar ((titular << Niño ) << Borrar );
//Añadir el nuevo gráfico
titular << Adjuntar (( Cuadro de lista H ((obj << Informe ) << Caja de clones )));
//Cerrar el gráfico de control temporal
objeto << Cerrar ventana ;
);
//Abra una ventana para mostrar el nuevo gráfico de control y un botón para actualizar el gráfico
//Incluye un botón para ejecutar el script anterior.
ahora = Nueva ventana ( "Tabla de control" ,
Cuadro de lista V (
Caja de botones ( "Nuevos datos" , Actualizar datos() ),
titular = Cuadro de lista H ();
)
);
//Cargar el primer gráfico en la ventana (ejecutar el script en la función)
Actualizar datos();
);
guión rápido;
Re: Cómo congelar la visualización del gráfico de control cuando se actualizan los datosPuede que esté yendo en la dirección equivocada aquí, pero creo que desea que el gráfico en su ventana se reemplace cuando aparezcan nuevos datos en lugar de agregar otro debajo/después.Para hacer eso, elimine el gráfico anterior antes de agregar uno nuevo.Aquí hay un ejemplo:
names default to here( 1 );
//Open sample data
dt = Open("$SAMPLE_DATA/Abrasion.jmp");
//A variable used to hide part of the data
lastrow = 10;
//Hide data after the last row (simulates a smaller table)
df = dt << Data Filter(
Location( {696, 15} ),
Mode( Select( 0 ), Show( 1 ), Include( 1 ) ),
Add Filter(
columns( Transform Column( "Row", Formula( Row() ) ) ),
Where(
Transform Column( "Row", Formula( Row() ) ) <= lastrow
)
)
);
//A function that will update the chart
UpdateData = function( {},
//Add one row to the data table
lastrow++;
//Update the data filter (simulates getting more data)
df << Delete All;
df << Add Filter(
columns( Transform Column( "Row", Formula( Row() ) ) ),
Where(
Transform Column( "Row", Formula( Row() ) ) <= lastrow
)
);
//Make the control chart
obj = dt << Control Chart Builder(
Variables( Y( :Abrasion ) ),
Chart(
Position( 1 ),
Points( Statistic( "Individual" ) ),
Limits( Sigma( "Moving Range" ) )
),
Chart(
Position( 2 ),
Points( Statistic( "Moving Range" ) ),
Limits( Sigma( "Moving Range" ) )
)
);
//Hide the temporary control chart window
obj << ShowWindow(0);
//Remove existing/old graph from the window (if there is one)
Try( (holder << Child) << Delete );
//Add the new graph
holder << Append(( H List Box( (obj << Report) << Clone Box)));
//Close the temporary control chart
obj << Close Window;
);
//Open a window to show the new control chart and a button to refresh the chart
//Includes a button to run the script above.
nw = New Window("Control Chart",
V List Box(
Button Box("New Data", UpdateData() ),
holder = H List Box();
)
);
//Load the first chart in the window (run the script in the function)
UpdateData();