Variable im Graph-Builder hinzufügenIch habe eine Datentabelle mit mehreren Spalten und Zeilen.
Ich möchte jede Spalte durchlaufen und sie dem Diagrammgenerator auf der x-Achse hinzufügen.
Dies ist mein einfaches Skript.
dt = Open( filepath );
all_cols = dt << Get Column Names( "String" );
cols_to_plot={};
For Each ({col}, all_cols,
If(col == "A" || col == "B",,
Insert into (cols_to_plot, col);
)
);
graph = dt << Graph Builder();
For Each ({col},cols_to_plot,
graph << Add Variable ("X", Column(dt, col)); // Also tried graph << Add Variable (X, Column(dt, col));
);
Dieses Skript gibt mir immer die folgende Fehlermeldung aus
Der Argumentwert ist beim Zugriff oder der Auswertung von 'Add Variable' ungültig, Ungültiges Argument("X"), Add Variable("X", Column(dt, col)) /*###*/ in Zeile 600
Nur zur Überprüfung: Wenn ich das untenstehende Skript ausführe, funktioniert es einwandfrei, aber ich möchte es für ca. 1000 Spalten darstellen.
graph = dt << Graph Builder(
Variables(X(cols_to_plot[1]),X(cols_to_plot[2]),X(cols_to_plot[3]));
);
Was übersehe ich hier? Ich bin für jede Hilfe dankbar.
Bearbeitet (jthi): JSL-Formatierung hinzugefügt
Automatisierung und SkripterstellungBetreff: Variable im Graph-Builder hinzufügenIch bin mir nicht ganz sicher, welche Art von Handlung Sie anstreben, aber ein Beispiel wäre etwa Folgendes:
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
cols_to_plot = {"age", "sex"};
graph = dt << Graph Builder();
For Each ({col},cols_to_plot,
Eval(EvalExpr(
graph << Add Variable({Expr(NameExpr(AsColumn(dt, col))), Role("X")});
));
);
Überprüfen Sie die korrekte Syntax für << Variable hinzufügen im Skriptindex und verwenden Sie die Auswertung von Ausdrücken, um die Spaltenreferenz im korrekten Format zu erhalten.

(Je nach gewünschtem Endergebnis können Sie auch einen anderen Weg wählen, bei dem Sie den gesamten Graph-Builder-Ausdruck selbst erstellen.)
Betreff: Variable im Graph-Builder hinzufügenIch habe diese Methode ausprobiert und auch Folgendes versucht:
For Each ({col}, cols_to_plot,
col_ref = Column(dt, col);
graph << Add variable (col_ref, Role("X"));
);
In beiden Fällen hängt sich mein JSL auf; meine Datentabelle hat nur 1000 Spalten und 500 Zeilen.
Ist das die effizienteste Methode, oder gibt es eine bessere Möglichkeit, alle Spalten der Tabelle gleichzeitig auf der X-Achse darzustellen? Wenn ich dasselbe in der grafischen Benutzeroberfläche versuche, ist es deutlich schneller.
Betreff: Variable im Graph-Builder hinzufügenWelche Art von Handlung möchten Sie erstellen?
Betreff: Variable im Graph-Builder hinzufügenIch versuche, ein einfaches Streudiagramm zu erstellen, bei dem alle Spalten nacheinander auf der X-Achse angeordnet sind.
Etwa so wie unten

Betreff: Variable im Graph-Builder hinzufügenDa Sie so viele Spalten haben, würde ich den Graph Builder-Ausdruck wahrscheinlich direkt erstellen, anstatt die Spalten einzeln hinzuzufügen. Erstellen Sie das Diagramm manuell, kopieren Sie das Skript, um zu sehen, wie es erstellt wurde, und replizieren Sie es dann mit JSL. Unten finden Sie ein Beispiel.
JMP erstellte ein Skript
Graph Builder(
Size(528, 458),
Show Control Panel(0),
Variables(
X(:"0.642539"n, Combine("Parallel Merged")),
X(:"0.645736349"n, Position(1), Combine("Parallel Merged")),
X(:"0.648933698"n, Position(1), Combine("Parallel Merged")),
X(:"0.652131047"n, Position(1), Combine("Parallel Merged")),
X(:"0.655328396"n, Position(1), Combine("Parallel Merged")),
X(:"0.658525745"n, Position(1), Combine("Parallel Merged")),
X(:"0.661723094"n, Position(1), Combine("Parallel Merged")),
X(:"0.664920443"n, Position(1), Combine("Parallel Merged")),
X(:"0.668117792"n, Position(1), Combine("Parallel Merged")),
X(:"0.671315141"n, Position(1), Combine("Parallel Merged")),
X(:"0.67451249"n, Position(1), Combine("Parallel Merged")),
X(:"0.677709839"n, Position(1), Combine("Parallel Merged")),
X(:"0.680907188"n, Position(1), Combine("Parallel Merged")),
X(:"0.684104537"n, Position(1), Combine("Parallel Merged")),
X(:"0.687301886"n, Position(1), Combine("Parallel Merged")),
X(:"0.690499235"n, Position(1), Combine("Parallel Merged"))
),
Elements(Points(X(1), X(2), X(3), X(4), X(5), X(6), X(7), X(8), X(9), X(10), X(11), X(12), X(13), X(14), X(15), X(16), Legend(4)))
);
Um dies mit JSL zu erstellen, könnten Sie beispielsweise Folgendes tun:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Functional Data/NMR DoE.jmp");
nrmcols = dt << get column group("NMR Spectra");
colnames = Transform Each({col}, nrmcols,
AsColumn(dt, col) << get name;
);
colnames = colnames[1::20];
var_expr = Expr(Variables());
points_expr = Expr(Points());
For Each({colname, idx}, colnames,
x_expr = EvalExpr(X(Expr(NameExpr(AsColumn(dt, colname))), Position(1), Combine("Parallel Merged")));
point_expr = EvalExpr(X(Expr(idx)));
Insert Into(var_expr, Name Expr(x_expr));
Insert Into(points_expr, Name Expr(point_expr));
);
gb = Eval(Substitute(
Expr(dt << Graph Builder(
Size(528, 458),
Show Control Panel(0),
_var_,
Elements(_points_)
)),
Expr(_var_), Name Expr(var_expr),
Expr(_points_), Name Expr(points_expr)
));
Write();
Betreff: Variable im Graph-Builder hinzufügenDas funktioniert einwandfrei, vielen Dank für die Hilfe!
Betreff: Variable im Graph-Builder hinzufügenHallo,
Ich habe ein weiteres Problem mit den von mir erstellten Diagrammen: Ich kann sie in keinem der Formate speichern, die ich ausprobiert habe (.jmpreport, .jrp usw.). Ich möchte die Diagramme nicht als statische PNG- oder JPG-Dateien speichern, sondern als interaktive Diagramme mit eingebetteten Daten.
nw = New Window("printing window",
gb = Eval(Substitute(
Expr(dt << Graph Builder(
Show Window(1),
Size(528, 458),
Show Control Panel(0),
_var_,
Elements(_points_)
)),
Expr(_var_), Name Expr(var_expr),
Expr(_points_), Name Expr(points_expr)
));
); <BR /><BR />reportpath = ::my_dir_path||"/metadata/"||metaTestfile;
newWindow<< Save(reportpath); Also tried
gb = Eval(Substitute(
Expr(dt << Graph Builder(
Show Window(1),
Size(528, 458),
Show Control Panel(0),
_var_,
Elements(_points_)
)),
Expr(_var_), Name Expr(var_expr),
Expr(_points_), Name Expr(points_expr)
));
gb << Show Window;
newWindow = Window (gb);
reportpath = ::my_dir_path||"/metadata/"||metaTestfile;
newWindow<< Save(reportpath );
The script doesn't throw any error in any case but also not saving the graph
Betreff: Variable im Graph-Builder hinzufügenDer Scripting Index enthält normalerweise die Antworten für Skripting (<< Fensterbericht speichern).
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Functional Data/NMR DoE.jmp");
nrmcols = dt << get column group("NMR Spectra");
colnames = Transform Each({col}, nrmcols,
AsColumn(dt, col) << get name;
);
colnames = colnames[1::20];
var_expr = Expr(Variables());
points_expr = Expr(Points());
For Each({colname, idx}, colnames,
x_expr = EvalExpr(X(Expr(NameExpr(AsColumn(dt, colname))), Position(1), Combine("Parallel Merged")));
point_expr = EvalExpr(X(Expr(idx)));
Insert Into(var_expr, Name Expr(x_expr));
Insert Into(points_expr, Name Expr(point_expr));
);
gb = Eval(Substitute(
Expr(dt << Graph Builder(
Size(528, 458),
Show Control Panel(0),
_var_,
Elements(_points_)
)),
Expr(_var_), Name Expr(var_expr),
Expr(_points_), Name Expr(points_expr)
));
gb << Save Window Report("$DOWNLOADS/test.jrp", embed data(1));
// demo purposes
Close(dt, no save);
wait(1);
Open("$DOWNLOADS/test.jrp");
Write();