Wie kann ich alle X- und Y-Daten in einem einzigen Zeitreihendiagramm in der JMP-Anwendung skripten?Hallo alle,
Ich entwickle eine JMP-Anwendung, die die Python-Integration verwendet, um den Anwendungsbenutzern die Flexibilität beim Laden zu geben irgendein (Excel) Datei mit industriellen Prozessdaten. Diese Anwendung enthält mehrere Modulfenster und umfangreiches Skripting.
Eine Sache, die ich versuche, ist, einfach alle Daten aus einer geladenen Datendatei darauf zu zeichnen ein Diagramm , wobei die erste Spalte immer die Zeit (X) und die restlichen Spalten die Prozessvariablen (Y) sind. Ich habe ein Modul mit einer Graph Box erstellt, um dies anzuzeigen, sobald die Anwendung ausgeführt und die Daten geladen wurden, aber ich habe Probleme beim Skripten dieser Funktionalität. Da ich nicht weiß, wie viele Spalten in einer bestimmten Datendatei enthalten sind und wie sie betitelt sind, muss das Skript automatisch alle Ys (alle Datenspalten außer der ersten) akzeptieren und durch das Diagramm leiten.
Beim Herumspielen mit den verschiedenen Grafikoptionen von JMP war ich nicht in der Lage, Zeitreihendiagramme dazu zu bringen, mehrere überlagerte Diagramme anzuzeigen, also habe ich versucht, mit Graph Builder ein Skript zu erstellen. Wenn ich die Daten im Graph Builder manuell zeichne, kann ich alle gewünschten Spalten auswählen und sie auf den Graph Builder Y ziehen, und es wird so angezeigt, wie ich es möchte, wobei alle Daten in einem Diagramm angezeigt werden. Wenn ich jedoch versuche, dies zu skripten, zeigt Graph Builder nur die erste Y-Variable an, die ich durch das Skript passiere.
Ich bin mir nicht sicher, wie ich dieses Problem lösen soll. Irgendwelche Ratschläge/andere Vorschläge werden sehr geschätzt!
Vielen Dank!
-Estelle
PS Wenn es eine andere Möglichkeit gibt, diese Daten auf diese Weise grafisch darzustellen, ohne Graph Builder zu verwenden, lassen Sie es mich bitte wissen. Ich bevorzuge, dass diese Anwendung dem Benutzer nur das grafisch dargestellte Ergebnis anzeigt und nicht alle zusätzlichen Funktionen, die bei der Verwendung von Graph Builder verfügbar sind.
GrafikSkripterstellungBetreff: Wie kann man alle X- und Y-Daten in einem einzigen Zeitreihendiagramm in der JMP-Anwendung skripten?Vielen Dank für die hilfreichen Infos und Ratschläge. Ich schätze es wirklich!
Betreff: Wie kann man alle X- und Y-Daten in einem einzigen Zeitreihendiagramm in der JMP-Anwendung skripten?Die Kombination der Lösung ich und @txnelson vorausgesetzt, früher sollten Sie in der Lage sein, Punkt / glatter und so weiter zu ändern. Erstellen Sie zuerst das Diagramm mit JMP (es müssen nicht alle Spalten in der Y-Achse sein, Sie können nur zwei verwenden). Ich werde den Prozess durchgehen, wie ich dieses Skript entwickeln würde (das wird ein bisschen lang):
1. Öffnen Sie JMP-Beispieldaten. In diesem Fall hat Semiconductor Capability.jmp, wie ich weiß, viele Spalten
2. Erstellen Sie im Graph Builder ein Diagramm mit einigen Spalten als X-Achse und zwei als Y-Achse

Nimm das Drehbuch
Graph Builder(
Variables(X(:lot_id), Y(:NPN1), Y(:PNP1, Position(1))),
Elements(Points(X, Y(1), Y(2), Legend(3)))
)
3. Ändern Sie die Punkte in Linie und ich werde auch die Zusammenfassungsstatistik vom Standardwert ändern, damit ich sehen kann, wie das im Skript geändert werden kann

Drehbuch nehmen
Graph Builder(
Variables(X(:lot_id), Y(:NPN1), Y(:PNP1, Position(1))),
Elements(Line(X, Y(1), Y(2), Legend(4), Summary Statistic("Median")))
)
4. Jetzt habe ich ziemlich gute Basisskripte, um mit der Arbeit daran zu beginnen. Weil ich es weiß Re: Können Sie dies konstruieren, ohne den Ausdruck als Zeichenfolge zu schreiben? verwendet werden kann, um dieses Problem zu lösen, ich verwende das als Grundlage (Skript, das ich zuvor bereitgestellt habe).
Mit Basisdiagramm:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
x_col = Column(dt, 1);
y_cols = (dt << Get Column Names())[5::N Cols(dt)];
var_expr = EvalExpr(
Variables(X(Expr(x_col))
));
For Each({col}, y_cols,
y_expr = Expr(Y(Position(1)));
Insert Into(y_expr, NameExpr(col), 1);
Insert Into(var_expr, Name Expr(y_expr));
);
gb = Eval(Substitute(
Expr(
gb = dt << Graph Builder(
Size(838, 391),
Show Control Panel(0),
vvv,
)
),
Expr(vvv), Name Expr(var_expr),
));
gb_image = gb << get picture;
gb << Close Window;
New window("test",
gb_image
);
Wenn ich jetzt Linien anstelle von Punkten haben wollte, würde ich prüfen, was ich im "Linien" -Skript ändern muss, das JMP mir zuvor gegeben hat. Grundsätzlich muss ich Elemente hinzufügen.
Elements(Line(X, Y(1), Y(2), Legend(4), Summary Statistic("Median")))
Glücklicherweise wurden diese in dem anderen Beitrag hinzugefügt
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
x_col = Column(dt, 1);
y_cols = (dt << Get Column Names())[5::N Cols(dt)];
var_expr = EvalExpr(
Variables(X(Expr(x_col))
));
var_line = Expr(Line(X));
For Each({col, idx}, y_cols,
y_expr = Expr(Y(Position(1)));
Insert Into(y_expr, NameExpr(col), 1);
Insert Into(var_expr, Name Expr(y_expr));
yline_expr = Parse("Y("||char(idx)||")");
Insert Into(var_line, Name Expr(yline_expr));
);
gb = Eval(Substitute(
Expr(
gb = dt << Graph Builder(
Size(838, 391),
Show Control Panel(0),
vvv,
Elements(yyy)
)
),
Expr(vvv), Name Expr(var_expr),
Expr(yyy), Name Expr(var_line)
));
gb_image = gb << get picture;
gb << Close Window;
New window("test",
gb_image
);

(Ich habe die zusammenfassenden Statistiken nicht geändert, aber es sollte ziemlich einfach sein, sie zu ändern, indem Sie einige weitere Ausdrücke in var_line einfügen, bevor Sie den Graph Builder erstellen.)
yline_expr = Expr(Legend(6));<BR />Insert Into(var_line, Name Expr(yline_expr));<BR />yline_expr = Expr(Summary Statistic("Median"));<BR />Insert Into(var_line, Name Expr(yline_expr));<BR />
Das Wissen, wie man Expr, Substitute, NameExpr und so weiter verwendet, habe ich durch diese paar Posts in der Community gelernt Fügen Sie mit Eval Insert, Eval Expr, Parse und Substitute einen Ausdruck in einen anderen ein , Funktionen zur Behandlung von Ausdrücken: Teil I - Enträtseln von Expr(), NameExpr(), Eval(), ... Rätsel und mit viel, viel Versuch und Irrtum (ich werde immer noch mit ihnen verwechselt, besonders mit Name Expr)
Und schließlich, wenn ich dieses Skript mit dem Skript kombinieren würde, das Sie haben (ich würde es mehr bereinigen, die Reihenfolge der Ausdrücke ändern, höchstwahrscheinlich Spaltenselektoren vorfüllen und vielleicht die Option anbieten, um auszuwählen, welche Art von Diagramm verwendet werden soll, aber das sollte geben eine Idee):
Mehr sehen...
Names Default To Here(1);
//the data table you want to operate on
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
//number of columns in the data table
numcol = N Col(dt);
selectorwindow = New Window("Column Selector",
<<MODAL></MODAL>
Betreff: Wie kann man alle X- und Y-Daten in einem einzigen Zeitreihendiagramm in der JMP-Anwendung skripten?Danke für die Antwort und den "<
Eine Sache, die ich nicht sehe / verstehe, ist, wie ich angeben soll, ob dieses Diagramm die Linie oder den Glätter und den Punkt oder möglicherweise eine andere Kombination von Diagrammelementen verwenden soll, da ich mich nicht entschieden habe, was für meine Verwendung am besten ist. Gibt es eine Möglichkeit, das hinzuzufügen?
Vielen Dank!
-Estelle
Betreff: Wie kann man alle X- und Y-Daten in einem einzigen Zeitreihendiagramm in der JMP-Anwendung skripten?Danke für die Antwort! Ich habe versucht, das von JMP generierte Skript zu verwenden und es anzupassen, aber ich bekomme immer noch dieses Problem. Unten ist ein Skript, an dem ich gearbeitet habe, um zu sehen, welche Ergebnisse ich erzielen kann:
//the data table you want to operate on
datafile = Open( "Data.xlsx");
//number of columns in the data table
numcol = ncol(datafile);
selectorwindow = New Window("Column Selector", /*<<MODAL></MODAL>);Ich glaube, eines meiner Probleme könnte darin bestehen, dass ich nicht genau weiß, wie ich den Teil "Elements" angeben soll, um eine beliebige Anzahl von Y zu akzeptieren. Unabhängig davon, ob ich für dieses spezielle Skript weitere Elemente hinzufüge (Linie (Y(1), Y(2), Y(3) usw.)) und die von mir ausgewählten Spalten als Y ändere, erhalte ich immer noch nur eine gezeichnete Variable.
Vielen Dank!
-Estelle
Betreff: Wie kann man alle X- und Y-Daten in einem einzigen Zeitreihendiagramm in der JMP-Anwendung skripten?Es hört sich so an, als würden Sie Ihre JSL von Grund auf neu generieren ... wie es ein Python-Programmierer tun würde, anstatt den interaktiven Graph Builder zu nehmen, den Sie erstellt haben, und dann JMP die JSL generieren zu lassen, die das Diagramm erstellt.Wenn ich das folgende Diagramm interaktiv erstelle,

Indem Sie zum roten Dreieck gehen und "Skript" auswählen, wird ein Skript erstellt, das beide Variablen der Y-Achse verarbeitet
Graph Builder(
Size( 528, 448 ),
Show Control Panel( 0 ),
Variables( X( :age ), Y( :height ), Y( :weight, Position( 1 ) ) ),
Elements(
Points( X, Y( 1 ), Y( 2 ), Legend( 5 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 6 ) )
),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
5,
Base( 0, 0, 0, Item ID( "height", 1 ) ),
Base( 1, 0, 0, Item ID( "weight", 1 ) )
)}
)
)
);
Wenn Sie nun ein Skript wie das obige verwenden und versuchen, es zu erweitern, um so viele Y-Spalten zu verarbeiten, wie Sie benötigen, kann dies manchmal etwas mehr Arbeit erfordern.
Hier ist die gleiche Struktur eines Diagramms, aber mit viel mehr Y-Spalten

Hier ist die erweiterte JSL, die JMP erstellt hat, um das Diagramm neu zu erstellen
Graph Builder(
Size( 528, 458 ),
Show Control Panel( 0 ),
Variables(
X( :Wafer ID in lot ID ),
Y( :NPN1 ),
Y( :PNP1, Position( 1 ) ),
Y( :PNP2, Position( 1 ) ),
Y( :NPN2, Position( 1 ) ),
Y( :PNP3, Position( 1 ) ),
Y( :IVP1, Position( 1 ) ),
Y( :PNP4, Position( 1 ) )
),
Elements(
Points(
X,
Y( 1 ),
Y( 2 ),
Y( 3 ),
Y( 4 ),
Y( 5 ),
Y( 6 ),
Y( 7 ),
Legend( 3 )
),
Smoother(
X,
Y( 1 ),
Y( 2 ),
Y( 3 ),
Y( 4 ),
Y( 5 ),
Y( 6 ),
Y( 7 ),
Legend( 4 )
)
),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
3,
Base( 0, 0, 0, Item ID( "NPN1", 1 ) ),
Base( 1, 0, 0, Item ID( "PNP1", 1 ) ),
Base( 2, 0, 0, Item ID( "PNP2", 1 ) ),
Base( 3, 0, 0, Item ID( "NPN2", 1 ) ),
Base( 4, 0, 0, Item ID( "PNP3", 1 ) ),
Base( 5, 0, 0, Item ID( "IVP1", 1 ) ),
Base( 6, 0, 0, Item ID( "PNP4", 1 ) )
)}
)
)
);
Graph Builder(
Size( 528, 458 ),
Show Control Panel( 0 ),
Variables(
X( :Wafer ID in lot ID ),
Y( :NPN1 ),
Y( :PNP1, Position( 1 ) ),
Y( :PNP2, Position( 1 ) ),
Y( :NPN2, Position( 1 ) ),
Y( :PNP3, Position( 1 ) ),
Y( :IVP1, Position( 1 ) ),
Y( :PNP4, Position( 1 ) )
),
Elements(
Points(
X,
Y( 1 ),
Y( 2 ),
Y( 3 ),
Y( 4 ),
Y( 5 ),
Y( 6 ),
Y( 7 ),
Legend( 3 )
),
Smoother(
X,
Y( 1 ),
Y( 2 ),
Y( 3 ),
Y( 4 ),
Y( 5 ),
Y( 6 ),
Y( 7 ),
Legend( 4 )
)
),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
3,
Base( 0, 0, 0, Item ID( "NPN1", 1 ) ),
Base( 1, 0, 0, Item ID( "PNP1", 1 ) ),
Base( 2, 0, 0, Item ID( "PNP2", 1 ) ),
Base( 3, 0, 0, Item ID( "NPN2", 1 ) ),
Base( 4, 0, 0, Item ID( "PNP3", 1 ) ),
Base( 5, 0, 0, Item ID( "IVP1", 1 ) ),
Base( 6, 0, 0, Item ID( "PNP4", 1 ) )
)}
)
)
);
Hier muss der JSL-Programmierer die auszuführende Befehlszeichenfolge erstellen, um sie an Graph Builder zu übergeben.Wenn Sie dies bereits tun und nur die erste Y-Variable im Diagramm erhalten, passiert normalerweise, dass Graph Builder die an ihn übergebenen Informationen nicht auswerten kann.Wenn Sie die von Ihnen verwendete JSL bereitstellen, kann die Community normalerweise ziemlich gut helfen.
Betreff: Wie kann man alle X- und Y-Daten in einem einzigen Zeitreihendiagramm in der JMP-Anwendung skripten?Dieses Thema könnte hilfreich sein:
Re: Können Sie dies konstruieren, ohne den Ausdruck als Zeichenfolge zu schreiben?
Viele Ausdrücke hier, Sie können auch << Get picture verwenden, um "Funktionalitäten zu entfernen" aus dem Graph Builder
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
x_col = Column(dt, 1);
y_cols = (dt << Get Column Names())[5::N Cols(dt)];
var_expr = EvalExpr(
Variables(X(Expr(x_col))
));
For Each({col}, y_cols,
y_expr = Expr(Y(Position(1)));
Insert Into(y_expr, NameExpr(col), 1);
Insert Into(var_expr, Name Expr(y_expr));
);
gb = Eval(Substitute(
Expr(
gb = dt << Graph Builder(
Size(838, 391),
Show Control Panel(0),
vvv,
)
),
Expr(vvv), Name Expr(var_expr),
));
gb_image = gb << get picture;
gb << Close Window;
New window("test",
gb_image
);