So aktualisieren Sie die Beschriftung der Referenzlinien der Y-Achse in numerische Werte mithilfe eines JSL-Skripts (Automatisieren von Diagrammen mit USL-LSL-Beschriftung)Wie im Titel angegeben: Wie aktualisiere ich die Beschriftung der Referenzlinien der Y-Achse in einem numerischen Wert mithilfe eines JSL-Skripts (Automatisierung von Diagrammen mit USL-LSL-Beschriftung)?
Ich verwende derzeit ein JSL-Skript, um eine Reihe von Diagrammen aus einer Reihe von Datentabellen zu generieren, um die Verteilungsdiagramme mit USL/LSL-Grenzen mit einem Klick anzuzeigen. Und diese in den Diagrammen angezeigten Grenzen basieren auf der Tabelle „Grenzen verwalten“ (ich habe die Werte aktualisiert). Ein weiterer Verbesserungsschritt besteht jedoch darin, diese USL/LSL-Beschriftungen in tatsächlichen numerischen Werten basierend auf der Tabelle „Grenzen verwalten“ anzuzeigen. Ich konnte die entsprechenden JSL-Befehle zur Automatisierung nicht finden, außer dass ich die Beschriftungen einzeln manuell aktualisieren muss. Weiß jemand, wie man ein Beispiel anzeigt? Vielen Dank im Voraus.

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
)
)Automatisierung und SkriptingGrundlegende Datenanalyse und ModellierungWindowsBetreff: So aktualisieren Sie die Beschriftung der Referenzlinien der Y-Achse in numerische Werte mithilfe eines JSL-Skripts (Automatisieren von Diagrammen mit USL-LSL-Beschriftung)Dies könnte einige Ideen geben : 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);
));
);
);
);
);
Wenn es sich nur um eine bestimmte Plattform und eine Achse handelt, kann dies höchstwahrscheinlich vereinfacht werden
Betreff: So aktualisieren Sie die Beschriftung der Referenzlinien der Y-Achse in numerische Werte mithilfe eines JSL-Skripts (Automatisieren von Diagrammen mit USL-LSL-Beschriftung)Hier ist ein einfaches Skript, das die Spezifikationsgrenzen für eine Spalte festlegt und dann den Graph Builder ausführt, der automatisch die Spezifikationsgrenzen anzeigt

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 ) ) )
);
Betreff: So aktualisieren Sie die Beschriftung der Referenzlinien der Y-Achse in numerische Werte mithilfe eines JSL-Skripts (Automatisieren von Diagrammen mit USL-LSL-Beschriftung)Danke, Nelson, der Code ähnelt meinem Code und kann die Referenzlinien von USL LSL auch nicht als numerischen Wert anzeigen.
Ich habe versucht, es mit Num(htUSL) in einen numerischen Wert umzuwandeln, aber das Diagramm wurde ohne jegliche Referenzlinien erstellt, sodass wir Expr (htUSL) verwenden müssen, um die Linien anzuzeigen. Es scheint, dass es keine andere Möglichkeit gibt, diese Grenzen per JSL-Skript als numerischen Wert anzuzeigen, außer auf manuelle Weise.
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
)
)
);Betreff: So aktualisieren Sie die Beschriftung der Referenzlinien der Y-Achse in numerische Werte mithilfe eines JSL-Skripts (Automatisieren von Diagrammen mit USL-LSL-Beschriftung)Danke, Jarmo. Das ist gut, um die Diagramme in Bezug auf die Prozessfähigkeit anzuzeigen. Es zeigt auch die USL LSL anstelle des numerischen Werts. Ich habe die Tabelle mit den verwalteten Grenzwerten bereits aktualisiert, möchte nur noch einen weiteren Schritt, um diese Grenzwerte im Diagramm per JSL-Skript als numerischen Wert anzuzeigen.
Betreff: So aktualisieren Sie die Beschriftung der Referenzlinien der Y-Achse in numerische Werte mithilfe eines JSL-Skripts (Automatisieren von Diagrammen mit USL-LSL-Beschriftung)Warum verwenden Sie 2 Listen in der Funktion Set Property("Spec Limits")? Für Spec Limits ist nur ein Grenzwertsatz zulässig. Darüber hinaus sucht die Funktion Eval( EvalExpr() nach Expr() in der eingeschlossenen Funktion und erweitert den Wert jedes Expr(), und dann kann die Funktion Eval() ihn richtig auswerten. In Ihrer zweiten Spezifikation der Spec Limits haben Sie Expr() durch Num() ersetzt. Da es sich innerhalb einer JMP-Liste befindet, wird weder dieses noch das htLSL und das htUSL ausgewertet, sodass JMP nicht weiß, was an JSL übergeben wird.
Wenn Sie versuchen, mehr als eine Spalte auszuführen, müssen für jede Spalte separate Spezifikationsgrenzen festgelegt werden.
Haben Sie mein Beispiel ausgeführt ... ohne Änderungen? Wenn ja, wird ein Diagramm mit USL- und LSL-Referenzlinien erstellt?
Betreff: So aktualisieren Sie die Beschriftung der Referenzlinien der Y-Achse in numerische Werte mithilfe eines JSL-Skripts (Automatisieren von Diagrammen mit USL-LSL-Beschriftung)Hallo Jim, es geht darum, die Referenzzeilen in numerische Werte statt in „USL“-Text zu ändern.
Ihr Codebeispiel kann ein Diagramm mit USL- und LSL-Referenzlinien ohne Änderungen anzeigen. Ich möchte lediglich USL/LSL als numerischen Wert anzeigen (Referenz aus der Tabelle „Grenzwert verwalten“).
Anbei ein Schnappschuss, der meinen Wunsch zeigt, USL, LSL in numerische Werte zu ändern (siehe rechte Seite), aber ich wünschte, das könnte zur Automatisierung in einem JSL-Skript erfolgen. Danke.

Betreff: So aktualisieren Sie die Beschriftung der Referenzlinien der Y-Achse in numerische Werte mithilfe eines JSL-Skripts (Automatisieren von Diagrammen mit USL-LSL-Beschriftung)Hier ist ein Beispiel, bei dem eine vorhandene Grenzwerttabelle zum Erstellen der Referenzlinien verwendet wird. Es gibt 2 verschiedene Beispiele mit 2 verschiedenen Methoden

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 );
);Betreff: So aktualisieren Sie die Beschriftung der Referenzlinien der Y-Achse in numerische Werte mithilfe eines JSL-Skripts (Automatisieren von Diagrammen mit USL-LSL-Beschriftung)Ich nehme an, Sie haben das Skript, das ich Ihnen zur Verfügung gestellt habe, nicht verstanden, da es zeigt, wie man die Spezifikationsgrenzen in einem Diagramm umbenennt. Dadurch werden die Werte anstelle von LSL, USL und Zieltext verwendet.
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);
));
);
);
);
);

Höchstwahrscheinlich ist es besser , die Eigenschaften der Spezifikationsgrenzenspalte bei aktivierter Option „Grenzen anzeigen“ nicht zu verwenden und nur Grenzen als Referenzlinien basierend auf den Spalteneigenschaften mit Ihrem eigenen Namen hinzuzufügen.
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
);
Betreff: So aktualisieren Sie die Beschriftung der Referenzlinien der Y-Achse in numerische Werte mithilfe eines JSL-Skripts (Automatisieren von Diagrammen mit USL-LSL-Beschriftung)Danke für die Antwort im Urlaub, Jim. Ich kann es jetzt mit der zweiten Methode als numerischen Wert festlegen.
Betreff: So aktualisieren Sie die Beschriftung der Referenzlinien der Y-Achse in numerische Werte mithilfe eines JSL-Skripts (Automatisieren von Diagrammen mit USL-LSL-Beschriftung)Danke für das Beispiel, Jarmo. Beide Beispiele funktionieren einwandfrei. Die Automatisierung ist abgeschlossen.