Wie schreibe ich alle X- und Y-Daten in ein einziges Zeitreihendiagramm in der JMP-Anwendung?Hallo zusammen,
Ich entwickle eine JMP-Anwendung, die die Python-Integration nutzt, um den Anwendungsbenutzern die Flexibilität zu geben, industrielle Prozessdaten in jede (Excel-)Datendatei zu laden. Diese Anwendung umfasst mehrere Modulfenster und umfangreiche Skripte.
Eine Sache, die ich versuche, besteht darin, einfach alle Daten aus einer geladenen Datendatei in einem Diagramm darzustellen, wobei die erste Spalte immer die Zeit (X) und die restlichen Spalten die Prozessvariablen (Y) sind. Ich habe ein Modul mit einem Diagrammfeld erstellt, um dieses anzuzeigen, sobald die Anwendung ausgeführt und die Daten geladen werden, aber ich habe Probleme beim Skripten dieser Funktionalität. Da ich nicht weiß, wie viele Spalten in einer bestimmten Datendatei enthalten sein werden und auch nicht, wie sie betitelt sind, muss das Skript automatisch alle Ys (alle Datenspalten außer der ersten) akzeptieren und diese durch das Diagramm weiterleiten.
Beim Herumprobieren mit den verschiedenen Grafikoptionen von JMP konnte ich Zeitreihendiagramme nicht so erstellen, dass sie mehrere überlagerte Diagramme anzeigen, also habe ich versucht, mit Graph Builder ein Skript zu erstellen. Wenn ich die Daten manuell in Graph Builder zeichne, kann ich alle gewünschten Spalten auswählen und sie auf Graph Builder Y ziehen, und es wird wie gewünscht angezeigt, wobei alle Daten in einem Diagramm angezeigt werden. Wenn ich jedoch versuche, dies per Skript zu erstellen, zeigt Graph Builder nur die erste Y-Variable an, die ich durch das Skript übergebe.
Ich bin mir nicht sicher, wie ich dieses Problem lösen kann. Für Ratschläge/andere Vorschläge sind wir sehr dankbar!
Danke schön!
- 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 grafische Ergebnis anzeigt und nicht alle zusätzlichen Funktionen, die bei Verwendung von Graph Builder verfügbar sind.
Automatisierung und SkripterstellungBetreff: Wie schreibe ich alle X- und Y-Daten in ein einziges Zeitreihendiagramm in der JMP-Anwendung?Vielen Dank für die hilfreichen Informationen und Ratschläge. Ich schätze es wirklich!
Betreff: Wie schreibe ich alle X- und Y-Daten in ein einziges Zeitreihendiagramm in der JMP-Anwendung?Die Lösung me und kombinieren @txnelson Vorausgesetzt, Sie sollten in der Lage sein, Punkt/Glättung usw. zu ändern. Erstellen Sie zunächst das Diagramm mit JMP (es müssen nicht alle Spalten auf der Y-Achse vorhanden sein, Sie können auch nur zwei verwenden). Ich werde den Prozess durchgehen, wie ich dieses Skript entwickeln würde (das wird etwas 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

Nehmen Sie 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 Linien und ich werde auch die Zusammenfassungsstatistik vom Standardwert ändern, damit ich sehen kann, wie das im Skript geändert werden kann

Nehmen Sie das Drehbuch
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 Grundskripte, um mit der Arbeit daran zu beginnen. Weil ich es weiß Betreff: Können Sie dies konstruieren, ohne Ausdruck als Zeichenfolge zu schreiben? zur Lösung dieses Problems verwendet werden kann, verwende ich als Basis (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 nun eine Linie anstelle von Punkten haben möchte, würde ich prüfen, was ich in dem „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")))
Zum Glück wurden diese im 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 Zusammenfassungsstatistiken nicht geändert, aber es sollte ziemlich einfach sein, sie zu ändern, indem ich vor der Erstellung des Diagrammgenerators einige weitere Ausdrücke in var_line einfüge.)
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 usw. verwendet, habe ich durch diese paar Beiträge in der Community gelernt Fügen Sie einen Ausdruck in einen anderen ein, indem Sie Eval Insert, Eval Expr, Parse und Substitute verwenden , Funktionen zur Ausdrucksverarbeitung: Teil I – Expr(), NameExpr(), Eval(), ... entschlüsseln Rätsel und mit vielen, vielen Versuchen und Irrtümern (ich verwechsele sie immer noch, besonders mit Name Expr)
Und schließlich, wenn ich dieses Skript mit dem Skript kombinieren würde, das Sie haben (ich würde es weiter bereinigen, die Reihenfolge der Ausdrücke ändern, höchstwahrscheinlich Spaltenselektoren vorfüllen und möglicherweise eine Option zur Auswahl des zu verwendenden Diagrammtyps bereitstellen, aber das sollte funktionieren eine Idee):
Mehr sehen... Betreff: Wie schreibe ich alle X- und Y-Daten in ein einziges Zeitreihendiagramm in der JMP-Anwendung?Vielen Dank für die Antwort und den „<
Eine Sache, die ich nicht sehe/verstehe, ist, wie ich angeben soll, ob dieses Diagramm die Linie „Linie“, „Glättung und Punkt“ oder möglicherweise eine andere Kombination von Diagrammelementen verwenden soll, da ich noch nicht entschieden habe, was für meine Verwendung am besten ist. Gibt es eine Möglichkeit, das hier hinzuzufügen?
Danke schön!
- Estelle
Betreff: Wie schreibe ich alle X- und Y-Daten in ein einziges Zeitreihendiagramm in der JMP-Anwendung?Danke für die Antwort! Ich habe versucht, das von JMP generierte Skript zu verwenden und anzupassen, aber dieses Problem tritt immer noch auf. 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 liegen, dass ich nicht ganz sicher bin, wie ich den Teil „Elemente“ angeben soll, um eine beliebige Anzahl von Ys 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 in Y ändere, erhalte ich immer noch nur eine dargestellte Variable.
Danke!
- Estelle
Betreff: Wie schreibe ich alle X- und Y-Daten in ein einziges Zeitreihendiagramm in der JMP-Anwendung?Es klingt, als ob Sie Ihre JSL von Grund auf generieren würden ... wie es ein Python-Programmierer tun würde, anstatt den von Ihnen erstellten interaktiven Graph Builder zu nehmen und dann JMP die JSL generieren zu lassen, die das Diagramm erstellt.Wenn ich die folgende Grafik interaktiv erstelle,

Wenn 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 Ihr Problem nun darin besteht, dass Sie ein Skript wie das obige verwenden und versuchen, es so zu erweitern, dass es so viele Y-Spalten verarbeiten kann, wie Sie benötigen, kann das manchmal etwas mehr Arbeit erfordern.
Hier ist die gleiche Struktur eines Diagramms, jedoch 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 Befehlszeichenfolge erstellen, die er ausführen und an Graph Builder übergeben soll.Wenn Sie dies bereits tun und nur die erste Y-Variable im Diagramm erhalten, liegt es normalerweise daran, dass Graph Builder die an ihn übergebenen Informationen nicht auswerten kann.Wenn Sie die JSL bereitstellen, die Sie verwenden, kann die Community normalerweise ziemlich gut helfen.
Betreff: Wie schreibe ich alle X- und Y-Daten in ein einziges Zeitreihendiagramm in der JMP-Anwendung?Dieses Thema könnte hilfreich sein:
Betreff: Können Sie dies konstruieren, ohne Ausdruck als Zeichenfolge zu schreiben?
Hier gibt es viele Ausdrücke. Sie können auch << Get picture verwenden, um „Funktionalitäten“ aus dem Graph Builder zu entfernen
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
);