So aktualisieren Sie Achsenbegrenzungen über Global BoxHallo,
Ich möchte die Grenzen der Y-Achse eines Diagramms über globale Felder steuern (damit der Benutzer die Grenzen schnell ändern kann, ohne auf die Achseneigenschaften doppelklicken zu müssen ...).
In dem beigefügten Skript erstelle ich ein Fenster und ein Diagramm. Dann füge ich 2 Global Boxes (Lim1 und Lim2) hinzu, die ich initialisiere.
Sobald das Diagramm erstellt ist, ändere ich die Werte von Lim1 und Lim2, aber die Diagrammachse wird nicht entsprechend aktualisiert ... Ich sehe nicht, was ich falsch mache.
Kann jemand helfen?
Danke.
Betreff: Wie man Achsenbegrenzungen über Global Box aktualisiertIch bin auf Ihre Frage gestoßen, als ich versuchte, etwas sehr Ähnliches zu tun (Achsengrenzen durch Daten in vielen Diagrammen festlegen, damit Ausreißer nicht übersehen werden). Ich habe es gelöst, indem ich die Achsengrenzen auf einen auszuwertenden Ausdruck gesetzt habe (dh gleich dem Mindestwert - entweder die LSL oder der niedrigste Datenpunkt, umgekehrt für max). Siehe unten:
// 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 )}* Hinweis: Ich weiß, dass Ihr Problem seit 4 Jahren gelöst ist, aber es kann anderen mit ähnlichen Problemen helfen.
Betreff: Wie man Achsenbegrenzungen über Global Box aktualisiertNelson, Jeff,
Ich verstehe Ihre Argumentation: Die Verwendung der interaktiven Plattform (Ziehen, Verschieben, ...) der Achsen ist in der Tat sehr nützlich ... Aus mehreren Gründen ist sie jedoch für mich nicht hilfreich:
- Die meisten der von mir erstellten Diagramme enthalten Ausreißer, deren Wert viel höher ist als der Rest der Population. In diesem Fall ist die interaktive Lösung sehr zeitaufwändig und schmerzhaft ...
- Ich beabsichtige, ungefähr 30 Diagramme in einem einzigen Fenster zu generieren: Sie können sich vorstellen, dass das interaktive Ändern der 30 Diagramme keine Option ist. Es ist zeiteffizienter, ein Kästchen oder mehrere Kästchen zum Einstellen aller Werte zu haben.
Wie auch immer, ich sehe, dass die Lösung von Nelson gut funktioniert. Es sieht nach einem großen Komplex aus: Ich muss im Detail schauen, was gemacht wird.
vielen Dank.
Betreff: Wie man Achsenbegrenzungen über Global Box aktualisiertIch habe das Format ein wenig geändert, nur weil ich mir nicht sicher war, was alles bewirkt. Nachfolgend finden Sie jedoch ein Beispiel dafür, wie ich normalerweise mit dem von Ihnen in Frage gestellten Punkt umgehe. Meine größere Frage ist, ist es nicht einfacher, die Achseneinstellung für Ihre Benutzer einfach zu ziehen und zu verschieben, als die Min- und Max-Werte tatsächlich einzugeben?
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>Betreff: Wie man Achsenbegrenzungen über Global Box aktualisiertDas Problem ist, dass die globale Variable verwendet wird, um die Achsen festzulegen, wenn das Diagramm erstellt wird, aber das Diagramm danach keine Beziehung mehr zur globalen Variablen hat.
Es gibt Möglichkeiten, die Interaktivität zu erstellen, nach der Sie suchen (und ich bin sicher, dass jemand hier einen Prototyp bereitstellen kann), aber übersehen Sie das bitte nicht die eingebaute Interaktivität der Achse jedes Diagramms in JMP. Alles, was Sie tun müssen, ist, mit der Maus über die Achse zu fahren, und der Cursor verwandelt sich in eine Hand, und Sie können klicken und ziehen, um die Achse zu ändern.

Sie würden Ihren Benutzern einen großen Dienst erweisen, indem Sie ihnen dies beibringen.Auf diese Weise haben sie die Kontrolle über jedes Diagramm, das sie in JMP sehen, und nicht nur über die, die Sie für sie erstellen und für die sie praktische Textfeld-Steuerelemente bereitstellen.