Cómo actualizar la etiqueta de las líneas de referencia del eje Y en un valor numérico mediante un script JSL (automatizar gráficos con la etiqueta USL LSL)Como se indica en el título, ¿cómo actualizar la etiqueta de las líneas de referencia del eje Y en un valor numérico usando un script JSL (automatizar gráficos con etiqueta USL LSL)?
Actualmente estoy usando un script JSL para generar una serie de gráficos a partir de un conjunto de tablas de datos, con el fin de mostrar los gráficos de distribución con límites USL/LSL en un solo clic. Y esos límites que se muestran en los gráficos se basan en la tabla de límites de gestión (actualicé los valores). Pero un paso más para mejorar es mostrar esas etiquetas USL/LSL en valores numéricos reales basados en la tabla de límites de gestión. No pude encontrar los comandos JSL relevantes para automatizarlo, excepto que tengo que actualizar las etiquetas manualmente una por una. ¿Alguien sabe cómo mostrar algún ejemplo? Gracias de antemano.

For( i = 1, i <= 100, i++,
xCol = Column(dt, i);
if ( Mod( i-8, 5 ) == 0,
rowBox = hlistbox();
win << Append( rowBox )
);
rowBox << Append(
//New Window( "training - Fit Y by X by Serial",
//dt << Fit Group(
Graph Builder(
Size( 350, 350 ),
Fit to Window("off"),
Show Control Panel( 0 ),
Show Title ( 1 ),
Show Subtitle ( 0 ),
Show Legend( 1 ),
Show Header ( 0 ),
Show Footer ( 0 ),
//Update Variable to Column Name
Variables(X( :TEMP ),Y( xCol ),Overlay( :Unit )),
Elements( Smoother( X, Y, Legend( 8 ) ), Points( X, Y, Legend( 9 ) ) ),
SendToReport(
Dispatch(
{}, "Graph Builder",
OutlineBox, {Set Title( "" ), Image Export Display(Normal)},
),
Dispatch(
{}, "Graph Builder",
FrameBox,{Transparency(0.8), Left( 0 ), Right( 0 ), Top( 1 ), Bottom( 1 )},
)
//To update labels USL/LSL limits in numeric value
)
)Automatización y scriptingAnálisis y modelado de datos básicosVentanasRe: Cómo actualizar la etiqueta de las líneas de referencia del eje Y en un valor numérico mediante un script JSL (automatizar gráficos con la etiqueta USL LSL)Esto podría dar algunas ideas https://community.jmp.com/t5/Discussions/Change-Line-Color-and-Line-Style-in-all-platforms/mp/819799/highlight/true#M99792
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
ml = dt << Manage Limits(
Process Variables(dt << Get Column Group("Processes")),
);
ml << Show Limits All;
ml << Save to Column Properties;
ml << Close Window;
dt << Distribution(
Stack(1),
Continuous Distribution(
Column(:NPN1),
Horizontal Layout(1),
Vertical(0),
Process Capability(Use Column Property Specs)
)
);
// "Tool script" starts from here
// Names Default To Here(1);
abs = Current Report() << XPath("//AxisBox");
names = {"A", "B", "C", "D"};
idx = 0;
For Each({ab}, abs,
s = ab << get script;
For Each({cur_s}, s,
If(Head Name(cur_s) == "Add Ref Line",
l = Substitute(Name Expr(cur_s), Expr(Add Ref Line()), Expr(List()));
If(Contains(l, "LSL") | Contains(l, "Target") | Contains(l, "USL"),
// this isn't documented
idx++;
Eval(EvalExpr(
ab << Update Ref Line(1, Expr(idx), "Solid", "Orange", names[idx], 3);
));
);
);
);
);
Si solo se trata de una plataforma específica y un eje, lo más probable es que esto se pueda simplificar.
Re: Cómo actualizar la etiqueta de las líneas de referencia del eje Y en un valor numérico mediante un script JSL (automatizar gráficos con la etiqueta USL LSL)Aquí hay un script simple que establece los límites de especificación para una columna y luego ejecuta el generador de gráficos, que muestra automáticamente los límites de especificación.

Names Default To Here( 1 );
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Big Class.jmp" );
htUSL = 66;
htLSL = 55;
Eval(
Eval Expr(
dt:height << set property(
"spec limits",
{LSL( Expr( htLSL ) ), USL( Expr( htUSL ) ), Show Limits( 1 )}
)
)
);
dt << Graph Builder(
Size( 534, 456 ),
Show Control Panel( 0 ),
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 3 ) ), Smoother( X, Y, Legend( 4 ) ) )
);
Re: Cómo actualizar la etiqueta de las líneas de referencia del eje Y en un valor numérico mediante un script JSL (automatizar gráficos con la etiqueta USL LSL)Gracias Nelson, el código es similar a mi código y tampoco puede mostrar las líneas de referencia de USL LSL en valor numérico.
Intenté usar Num(htUSL) para cambiarlo a un valor numérico, pero genera el gráfico sin líneas de referencia, por lo que tendremos que usar Expr(htUSL) para mostrar las líneas. Parece que no hay otra opción para mostrar esos límites en valores numéricos a través de un script JSL, excepto de forma manual.
htUSL = 66;
htLSL = 55;
Eval(
Eval Expr(
dt:height << set property(
"spec limits",
{LSL( Expr( htLSL ) ), USL( Expr( htUSL ) ), Show Limits( 1 )},
{LSL( Num( htLSL ) ), USL( Num( htUSL ) ), Show Limits( 1 )}, //Not working
)
)
);Re: Cómo actualizar la etiqueta de las líneas de referencia del eje Y en un valor numérico mediante un script JSL (automatizar gráficos con la etiqueta USL LSL)Gracias Jarmo. Esto es bueno para mostrar los gráficos en función de la capacidad del proceso, también muestra el límite de nivel de servicio (USL) y el límite de nivel de servicio (LSL) en lugar del valor numérico. Ya actualicé la tabla de límites de administración, solo deseo tener un paso más para mostrar esos límites en valor numérico en el gráfico a través del script JSL.
Re: Cómo actualizar la etiqueta de las líneas de referencia del eje Y en un valor numérico mediante un script JSL (automatizar gráficos con la etiqueta USL LSL)¿Por qué utiliza 2 listas en la función Establecer propiedad ("Límites de especificación")? Solo se permite un conjunto de límites para los Límites de especificación. Además, la función Eval( EvalExpr() busca Expr() en la función incluida y expande el valor de cada Expr() y luego la función Eval() puede evaluarlo correctamente. En su segunda especificación de Límites de especificación, reemplazó Expr() con Num(). Debido a que está dentro de una lista JMP, no se evaluará ni la htLSL ni la htUSL, por lo que lo que se pasa a JSL será desconocido para JMP.
Si intenta ejecutar más de una columna, cada columna deberá tener sus límites de especificaciones por separado.
¿Has ejecutado mi ejemplo sin cambios? Si es así, ¿genera un gráfico con líneas de referencia USL y LSL?
Re: Cómo actualizar la etiqueta de las líneas de referencia del eje Y en un valor numérico mediante un script JSL (automatizar gráficos con la etiqueta USL LSL)Hola Jim, se trata de cambiar las líneas de referencia en valor numérico en lugar de texto "USL".
Su ejemplo de código puede mostrar un gráfico con líneas de referencia USL, LSL sin ningún cambio, solo quiero mostrar ese USL/LSL en un valor numérico (referencia de la tabla de límites de administración).
Adjunto una captura de pantalla para mostrar mi deseo de cambiar el USL, LSL en valor numérico (ver lado derecho), pero me gustaría poder hacerlo en un script JSL para automatización. Gracias.

Re: Cómo actualizar la etiqueta de las líneas de referencia del eje Y en un valor numérico mediante un script JSL (automatizar gráficos con la etiqueta USL LSL)A continuación se muestra un ejemplo en el que se utiliza una tabla de límites existente para crear las líneas de referencia. Hay dos ejemplos diferentes que utilizan dos métodos diferentes

Names Default To Here( 1 );
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Big Class.jmp" );
// open a limits table created from Manage Limits
dtLimit = New Table( "Limits",
Add Rows( 2 ),
New Column( "Variable", Character, "Nominal", Set Values( {"height", "weight"} ) ),
New Column( "LSL", Set Values( [55, 65] ) ),
New Column( "USL", Set Values( [66, 170] ) ),
New Column( "Target", Set Selected, Set Values( [., .] ) )
);
// One way to set the reference lines
colNames = dt << get column names( string, continuous );
// Create the graphs
For Each( {col}, colNames,
gb = dt << Graph Builder(
Size( 534, 456 ),
Show Control Panel( 0 ),
Variables( X( :age ), Y( As Column( col ) ) ),
Elements( Points( X, Y, Legend( 3 ) ), Smoother( X, Y, Legend( 4 ) ) )
);
// Set the ref lines
// Get the row in the limits table that has the limits for the current column
theRow = (dtLimit << get rows where( dtLimit:Variable == col ))[1];
Report( gb )[AxisBox( 2 )] << add ref line(
dtLimit:LSL[theRow],
"Solid",
"Blue",
Char( dtLimit:LSL[theRow] ),
1
);
Report( gb )[AxisBox( 2 )] << add ref line(
dtLimit:USL[theRow],
"Solid",
"Blue",
Char( dtLimit:USL[theRow] ),
1
);
);
// Second way to set the reference lines using Spec Limits column property
// the default when using the Spec Limits is for graph builder to insure
// the spec limits are displayed on the graph. This example with use the
// spec limits, and then change the label to a numeric
colNames = dt << get column names( string, continuous );
ml = dt << Manage Limits( Process Variables( Eval( colNames ) ) );
ml << load from limits table( dtLimit );
ml << Show Limits All;
ml << Save to Column Properties;
ml << Close Window;
// Create the graphs
For Each( {col}, colNames,
gb = dt << Graph Builder(
Size( 534, 456 ),
Show Control Panel( 0 ),
Variables( X( :age ), Y( As Column( col ) ) ),
Elements( Points( X, Y, Legend( 3 ) ), Smoother( X, Y, Legend( 4 ) ) )
);
// Set the ref lines
// Get the limits from the spec limits for the current column
// and change the label
specs = Column( dt, col ) << get property( spec limits );
Report( gb )[AxisBox( 2 )] << add ref line( specs["LSL"], "Solid", "Blue", Char( specs["LSL"] ), 1 );
Report( gb )[AxisBox( 2 )] << add ref line( specs["USL"], "Solid", "Blue", Char( specs["USL"] ), 1 );
);Re: Cómo actualizar la etiqueta de las líneas de referencia del eje Y en un valor numérico mediante un script JSL (automatizar gráficos con la etiqueta USL LSL)Supongo que no entendiste el script que te proporcioné, ya que muestra cómo cambiar el nombre de los límites de especificación en un gráfico. Esto utilizará los valores en lugar de LSL, USL y el texto de destino.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
ml = dt << Manage Limits(
Process Variables(dt << Get Column Group("Processes")),
);
ml << Show Limits All;
ml << Save to Column Properties;
ml << Close Window;
gb = dt << Graph Builder(
Size(528, 448),
Show Control Panel(0),
Variables(X(:SITE), Y(:NPN1)),
Elements(Points(X, Y, Legend(3)))
);
abs = Report(gb) << XPath("//AxisBox");
idx = 0;
For Each({ab}, abs,
s = ab << get script;
For Each({cur_s}, s,
If(Head Name(cur_s) == "Add Ref Line",
l = Substitute(Name Expr(cur_s), Expr(Add Ref Line()), Expr(List()));
If(Contains(l, "LSL") | Contains(l, "Target") | Contains(l, "USL"),
idx++;
Eval(EvalExpr(
ab << Update Ref Line(1, Expr(idx), "Solid", "Blue", Char(l[1]), 1);
));
);
);
);
);

Lo más probable es que sea mejor no usar propiedades de columna de límite de especificación con Mostrar límites habilitado y simplemente agregar límites como líneas de referencia según las propiedades de columna con su propio nombre.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
gb = dt << Graph Builder(
Size(528, 448),
Show Control Panel(0),
Variables(X(:SITE), Y(:NPN1)),
Elements(Points(X, Y, Legend(3)))
);
specs = Column(dt, "NPN1") << get property("Spec Limits");
Report(gb)[AxisBox(2)] << Add Ref Line(
specs["LSL"], "Solid", "Blue", Char(specs["LSL"]), 1
);
Report(gb)[AxisBox(2)] << Add Ref Line(
specs["USL"], "Solid", "Blue", Char(specs["USL"]), 1
);
Re: Cómo actualizar la etiqueta de las líneas de referencia del eje Y en un valor numérico mediante un script JSL (automatizar gráficos con la etiqueta USL LSL)Gracias por la respuesta durante las vacaciones, Jim. Ahora puedo configurarlo en valor numérico con el segundo método.
Re: Cómo actualizar la etiqueta de las líneas de referencia del eje Y en un valor numérico mediante un script JSL (automatizar gráficos con la etiqueta USL LSL)Gracias por el ejemplo, Jarmo. Ambos ejemplos funcionan bien. La automatización está lista.