Comment mettre à jour l'étiquette des lignes de référence de l'axe Y en valeur numérique à l'aide d'un script JSL (Automatiser les tracés avec l'étiquette USL LSL)Comme l'indique le titre, comment mettre à jour l'étiquette des lignes de référence de l'axe Y en valeur numérique à l'aide d'un script JSL (automatiser les tracés avec l'étiquette USL LSL) ?
J'utilise actuellement un script JSL pour générer une série de tracés à partir d'un ensemble de tables de données, afin d'afficher les tracés de distribution avec les limites USL/LSL en un clic. Et ces limites affichées dans les tracés sont basées sur le tableau Gérer les limites (j'ai mis à jour les valeurs). Mais une étape supplémentaire pour s'améliorer consiste à afficher ces étiquettes USL/LSL dans des valeurs numériques réelles basées sur le tableau Gérer les limites. Je n'ai pas pu trouver les commandes JSL pertinentes pour l'automatiser, sauf que je dois mettre à jour les étiquettes manuellement une par une. Quelqu'un sait-il comment montrer un exemple ? Merci d'avance.

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
)
)Automatisation et scriptsAnalyse et modélisation de données de baseFenêtresRe: Comment mettre à jour l'étiquette des lignes de référence de l'axe Y en valeur numérique à l'aide d'un script JSL (Automatiser les tracés avec l'étiquette USL LSL)Cela pourrait donner quelques idées 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);
));
);
);
);
);
S'il s'agit d'une seule plate-forme spécifique et d'un seul axe, cela peut probablement être simplifié
Re: Comment mettre à jour l'étiquette des lignes de référence de l'axe Y en valeur numérique à l'aide d'un script JSL (Automatiser les tracés avec l'étiquette USL LSL)Voici un script simple qui définit les limites de spécification pour une colonne, puis exécute le générateur de graphiques, qui affiche automatiquement les limites de spécification

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: Comment mettre à jour l'étiquette des lignes de référence de l'axe Y en valeur numérique à l'aide d'un script JSL (Automatiser les tracés avec l'étiquette USL LSL)Merci Nelson, le code est similaire à mon code et il ne peut pas non plus afficher les lignes de référence de USL LSL en valeur numérique.
J'ai essayé d'utiliser Num(htUSL) pour le changer en valeur numérique mais cela génère le tracé sans aucune ligne de référence, ce qui nous obligera à utiliser Expr (htUSL) pour afficher les lignes. Il semble qu'il n'y ait pas d'autre option pour afficher ces limites en valeur numérique via un script JSL, sauf de manière manuelle.
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: Comment mettre à jour l'étiquette des lignes de référence de l'axe Y en valeur numérique à l'aide d'un script JSL (Automatiser les tracés avec l'étiquette USL LSL)Merci Jarmo. C'est une bonne idée pour afficher les tracés en termes de capacité de processus, cela montre également l'USL LSL au lieu de la valeur numérique. J'ai déjà mis à jour la table des limites de gestion, je souhaite juste avoir une étape supplémentaire pour afficher ces limites en valeur numérique dans le tracé via un script JSL.
Re: Comment mettre à jour l'étiquette des lignes de référence de l'axe Y en valeur numérique à l'aide d'un script JSL (Automatiser les tracés avec l'étiquette USL LSL)Pourquoi utilisez-vous 2 listes dans la fonction Set Property("Spec Limits") ? Un seul ensemble de limites est autorisé pour les limites de spécification. De plus, la fonction Eval( EvalExpr() recherche Expr() dans la fonction incluse et développe la valeur de chaque Expr(), puis la fonction Eval() peut l'évaluer correctement. Dans votre deuxième spécification Spec Limits, vous avez remplacé Expr() par Num(). Comme il se trouve à l'intérieur d'une liste JMP, aucune évaluation de celle-ci ou du htLSL et du htUSL ne sera évaluée, donc ce qui est passé à JSL sera inconnu de JMP.
Si vous essayez d'exécuter plusieurs colonnes, chaque colonne devra avoir ses limites de spécifications séparément.
Avez-vous exécuté mon exemple... sans modification ? Si oui, produit-il un graphique avec des lignes de référence USL et LSL ?
Re: Comment mettre à jour l'étiquette des lignes de référence de l'axe Y en valeur numérique à l'aide d'un script JSL (Automatiser les tracés avec l'étiquette USL LSL)Bonjour Jim, il s'agit de changer les lignes de référence en valeur numérique au lieu du texte « USL ».
Votre exemple de code est capable d'afficher un graphique avec des lignes de référence USL, LSL sans aucun changement, je veux juste afficher cet USL/LSL en valeur numérique (référence de la table de gestion des limites).
Ci-joint un instantané pour montrer mon désir de modifier l'USL, LSL en valeur numérique (voir côté droit), mais j'aimerais que cela puisse être fait dans un script JSL pour l'automatisation. Merci.

Re: Comment mettre à jour l'étiquette des lignes de référence de l'axe Y en valeur numérique à l'aide d'un script JSL (Automatiser les tracés avec l'étiquette USL LSL)Voici un exemple où une table de limites existante est utilisée pour créer les lignes de référence. Il existe 2 exemples différents utilisant 2 méthodes différentes

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: Comment mettre à jour l'étiquette des lignes de référence de l'axe Y en valeur numérique à l'aide d'un script JSL (Automatiser les tracés avec l'étiquette USL LSL)Je suppose que vous n'avez pas compris le script que je vous ai fourni car il montre comment renommer les limites de spécification dans un tracé. Cela utilisera les valeurs au lieu de LSL, USL et du texte cible
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);
));
);
);
);
);

Il sera probablement préférable de ne pas utiliser les propriétés de colonne de limite de spécification avec l'option Afficher les limites activée et d'ajouter simplement des limites comme lignes de référence en fonction des propriétés de colonne avec votre propre nom
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: Comment mettre à jour l'étiquette des lignes de référence de l'axe Y en valeur numérique à l'aide d'un script JSL (Automatiser les tracés avec l'étiquette USL LSL)Merci pour la réponse pendant les vacances, Jim. Je peux maintenant le définir en valeur numérique avec la deuxième méthode.
Re: Comment mettre à jour l'étiquette des lignes de référence de l'axe Y en valeur numérique à l'aide d'un script JSL (Automatiser les tracés avec l'étiquette USL LSL)Merci pour l'exemple, Jarmo. Les deux exemples donnés fonctionnent bien. L'automatisation est terminée.