Come aggiornare l'etichetta delle linee di riferimento dell'asse Y in valore numerico utilizzando uno script JSL (Automatizza i grafici con l'etichetta USL LSL)Come indicato nel titolo, come aggiornare l'etichetta delle linee di riferimento dell'asse Y in valore numerico utilizzando uno script JSL (tracciati automatici con etichetta USL LSL)?
Al momento sto usando uno script JSL per generare una serie di grafici da un set di tabelle di dati, per mostrare i grafici di distribuzione con limiti USL/LSL in un clic. E quei limiti mostrati nei grafici sono basati sulla tabella Manage Limits (ho aggiornato i valori). Ma un altro passaggio da migliorare è mostrare quelle etichette USL/LSL in valori numerici effettivi basati sulla tabella Manage Limits, non sono riuscito a trovare i comandi JSL pertinenti per automatizzarlo, tranne per il fatto che devo aggiornare manualmente le etichette una per una. Qualcuno sa come mostrare qualche esempio? Grazie in anticipo.

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
)
)Automazione e scriptingAnalisi e modellazione dei dati di baseFinestreRe: Come aggiornare l'etichetta delle linee di riferimento dell'asse Y in un valore numerico utilizzando uno script JSL (Automatizzare i grafici con l'etichetta USL LSL)Questo potrebbe dare qualche idea 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);
));
);
);
);
);
Se si tratta di una sola piattaforma specifica e di un solo asse, è molto probabile che ciò possa essere semplificato
Re: Come aggiornare l'etichetta delle linee di riferimento dell'asse Y in valore numerico utilizzando uno script JSL (Automatizzare i grafici con l'etichetta USL LSL)Ecco uno script semplice che imposta i limiti delle specifiche per una colonna e quindi esegue Graph Builder, che visualizza automaticamente i limiti delle specifiche

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: Come aggiornare l'etichetta delle linee di riferimento dell'asse Y in un valore numerico utilizzando uno script JSL (Automatizzare i grafici con l'etichetta USL LSL)Grazie Nelson, il codice è simile al mio e non riesce a mostrare le linee di riferimento di USL LSL in valore numerico.
Ho provato a usare Num(htUSL) per cambiarlo in valore numerico ma genera il grafico senza linee di riferimento, per cui dovremo usare Expr (htUSL) per mostrare le linee. Sembra che non ci sia altra opzione per mostrare quei limiti in valore numerico tramite script JSL, se non in modo manuale.
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: Come aggiornare l'etichetta delle linee di riferimento dell'asse Y in un valore numerico utilizzando uno script JSL (Automatizzare i grafici con l'etichetta USL LSL)Grazie Jarmo. È utile per mostrare i grafici in modalità capacità di processo, mostra anche l'USL LSL invece del valore numerico. Ho già aggiornato la tabella dei limiti di gestione, vorrei solo un altro passaggio per mostrare quei limiti in valore numerico nel grafico tramite script JSL.
Re: Come aggiornare l'etichetta delle linee di riferimento dell'asse Y in un valore numerico utilizzando uno script JSL (Automatizzare i grafici con l'etichetta USL LSL)Perché stai usando 2 elenchi nella funzione Set Property("Spec Limits")? Per Spec Limits è consentito un solo set di limiti. Inoltre, la funzione Eval( EvalExpr() cerca Expr() nella funzione inclusa ed espande il valore di ogni Expr() e quindi la funzione Eval() può valutarlo correttamente. Nella tua seconda specifica Spec Limits, hai sostituito Expr() con Num(). Poiché è all'interno di un elenco JMP, non verrà valutata alcuna valutazione di esso o di htLSL e htUSL, quindi ciò che viene passato a JSL sarà sconosciuto a JMP.
Se si tenta di eseguire più di una colonna, ogni colonna dovrà avere i propri limiti di specifiche separatamente.
Hai eseguito il mio esempio...senza modifiche? In tal caso, produce un grafico con linee di riferimento USL e LSL?
Re: Come aggiornare l'etichetta delle linee di riferimento dell'asse Y in un valore numerico utilizzando uno script JSL (Automatizzare i grafici con l'etichetta USL LSL)Ciao Jim, si tratta di modificare le linee di riferimento in valori numerici invece che in testo "USL".
Il tuo esempio di codice è in grado di mostrare un grafico con linee di riferimento USL e LSL senza alcuna modifica. Voglio solo mostrare che USL/LSL sono convertiti in valori numerici (riferimento dalla tabella dei limiti di gestione).
Snapshot allegato per mostrare il mio desiderio di cambiare USL,LSL in valore numerico (vedi lato destro), ma vorrei che si potesse fare in uno script JSL per l'automazione. Grazie.

Re: Come aggiornare l'etichetta delle linee di riferimento dell'asse Y in un valore numerico utilizzando uno script JSL (Automatizzare i grafici con l'etichetta USL LSL)Ecco un esempio in cui una tabella dei limiti esistente viene utilizzata per creare le linee di riferimento. Ci sono 2 esempi diversi che utilizzano 2 metodi diversi

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: Come aggiornare l'etichetta delle linee di riferimento dell'asse Y in un valore numerico utilizzando uno script JSL (Automatizzare i grafici con l'etichetta USL LSL)Immagino che tu non abbia capito lo script che ti ho fornito, in quanto mostra come rinominare i limiti di specifica in un grafico. Questo utilizzerà i valori invece di LSL, USL e testo di destinazione
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);
));
);
);
);
);

Molto probabilmente sarà meglio non utilizzare le proprietà della colonna dei limiti delle specifiche con Mostra limiti abilitato e aggiungere semplicemente i limiti come linee di riferimento in base alle proprietà della colonna con il tuo nome
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: Come aggiornare l'etichetta delle linee di riferimento dell'asse Y in un valore numerico utilizzando uno script JSL (Automatizzare i grafici con l'etichetta USL LSL)Grazie per la risposta durante le vacanze, Jim. Ora riesco a impostarlo in valore numerico con il secondo metodo.
Re: Come aggiornare l'etichetta delle linee di riferimento dell'asse Y in un valore numerico utilizzando uno script JSL (Automatizzare i grafici con l'etichetta USL LSL)Grazie per l'esempio, Jarmo. Entrambi gli esempi forniti funzionano bene. L'automazione è fatta.