Cómo actualizar los límites de los ejes a través de Global BoxHola,
Quiero controlar los límites del eje Y de un gráfico a través de cuadros globales (para permitir que el usuario cambie rápidamente los límites sin hacer doble clic en las propiedades del eje...).
En el script adjunto, creo una ventana y un gráfico. Luego agrego 2 cajas globales (Lim1 y Lim2) que inicializo.
Una vez que se genera el gráfico, modifico los valores de Lim1 y Lim2 pero el eje del gráfico no se actualiza en consecuencia... No veo qué estoy haciendo mal.
¿Alguien puede ayudar?
Gracias.
Re: Cómo actualizar los límites de los ejes a través de Global BoxEncontré su pregunta tratando de hacer algo muy similar (establecer límites de eje por datos en muchos gráficos para que no se pierdan los valores atípicos). Lo resolví estableciendo los límites del eje en una expresión para evaluar (es decir, igual al valor mínimo, ya sea el LSL o el punto de datos más bajo, opuesto al máximo). Vea abajo:
// Get min/max for Graph 1
dt = Current Data Table();
G1 = dt << Get Rows Where (:Column 1 == "Group1");
G1_Min = Eval( Min((LSL[1]*0.95), Min(:Column 2[G1])));
G1_Max = Eval( Max((USL[1]*1.05), Max(:Column 2[G1])));
dt << clear select;
// Get min/max for Graph 2 etc. repeat for each graph
dt = Current Data Table();
G2 = dt << Get Rows Where (:Column 1 == "Group2");
G2_Min = Eval( Min((LSL[2]*0.95), Min(:Column 2[G2])));
G2_Max = Eval( Max((USL[2]*1.05), Max(:Column 2[G2])));
dt << clear select;
// Assign axis limits and specification lines within the graph parameters (for Graph 1 - repeat for each)
Dispatch ({Min(G1_Min), Max(G1_Max), Inc( Eval((G1_Max - G1_Min) / 7))),
Add Ref Line( LSL[1], "Solid", "Medium Dark Blue", "LSL", 1 ),
Add Ref Line( USL[1], "Solid", "Medium Dark Blue", "USL", 1 )}* Nota: sé que su problema se resolvió después de 4 años, pero puede ayudar a otros con problemas similares.
Re: Cómo actualizar los límites de los ejes a través de Global BoxNelson, Jeff,
Entiendo tu razonamiento: usar la plataforma interactiva (arrastrar, mover,...) de los ejes es realmente muy útil... Sin embargo, por un par de razones, no es útil para mí:
- La mayoría de los gráficos que generaré contendrán valores atípicos que tendrán un valor mucho más alto que el resto de la población. En este caso, la solución interactiva requiere mucho tiempo y es dolorosa...
- Tengo la intención de generar como 30 gráficos en una sola ventana: puedes imaginar que cambiar interactivamente los 30 gráficos no es una opción. tener un cuadro o un par de cuadros para establecer todos los valores es más eficiente en el tiempo.
De todos modos, veo que la solución de Nelson funciona bien. Se ve un gran complejo: tengo que mirar en detalle lo que se hace.
muchas gracias.
Re: Cómo actualizar los límites de los ejes a través de Global BoxCambié un poco el formato, solo porque no estaba seguro de lo que estaba haciendo todo. Sin embargo, a continuación hay un ejemplo de cómo manejo normalmente el elemento que está cuestionando. Mi pregunta más importante es, ¿no es realmente más simple simplemente arrastrar y mover la configuración del eje más simple para sus usuarios, que escribir los valores mínimo y máximo?
Names Default To Here( 1 );
//DataPath = "C:\Program Files (x86)\SAS\JMP\11\Samples\Data\Variability Data\Wafer.jmp";
myTable = Open( "$SAMPLE_DATA\Variability Data\Wafer.jmp" );
Param = "Y";
Lim1 = 40;
Lim2 = 160;
FrameSize_X = 775;
FrameSize_Y = 200;
MyWindow = New Window( "Window Controls",
gr = MyTable << Variability Chart(
Y( :Name( "Y" ) ),
X( :Operator, :Wafer ),
Max Iter( 100 ),
Std Dev Chart( 1 ),
Show Range Bars( 0 ),
Show Grand Median( 0 ),
Std Dev Chart( 0 ),
Points Jittered( 1 ),
Show Box Plots( 1 ),
Automatic Recalc( 1 ),
SendToReport(
Dispatch(
{"Variability Chart for Y"},
"2",
ScaleBox,
{Min( Lim1 ), Max( Lim2 ), Inc( Abs( Lim2 - Lim1 ) / 10 ), Minor Ticks( 0 ),
Show Major Grid( 1 ), Show Minor Grid( 1 ), Inside Ticks( 1 )}
),
Dispatch( {"Variability Chart for Y"}, "Y", TextEditBox, {Set Text( Param )} ),
Dispatch(
{"Variability Chart for Y"},
"Variability Chart",
FrameBox,
{Frame Size( FrameSize_X, FrameSize_Y ), ,
Row Legend(
Name( "Operator" ),
Color( 1 ),
Color Theme( "JMP Default" ),
Marker( 0 ),
Marker Theme( "" ),
Continuous Scale( 0 ),
Reverse Scale( 0 ),
Excluded Rows( 0 )
)}
),
Dispatch(
{"Variability Chart for Y"},
"Varability Std Chart",
FrameBox,
{Frame Size( FrameSize_X, FrameSize_Y )}
)
)
),
Panel Box( "1/ Start...",
g3 = V List Box(
H List Box(
Text Box( "Lim 1" ),
n1 = Number Edit Box(
Lim1,
5,
<<SETFUNCTION></SETFUNCTION>Re: Cómo actualizar los límites de los ejes a través de Global BoxEl problema es que la variable global se usa para establecer los ejes cuando se crea el gráfico, pero el gráfico no tiene ninguna relación con la variable global después de eso.
Hay formas de crear la interactividad que está buscando (y estoy seguro de que alguien aquí puede proporcionarle un prototipo), pero no pase por alto la interactividad incorporada del eje de cada gráfico en JMP. Todo lo que tiene que hacer es pasar el cursor sobre el eje y el cursor se convertirá en una mano y puede hacer clic y arrastrar para cambiar el eje.

Harías un gran servicio a tus usuarios enseñándoles esto.De esa forma, tendrán control sobre cada gráfico que vean en JMP, no solo sobre los que usted cree para ellos y les proporcione prácticos controles de cuadro de texto.