Wie übergebe ich eine Y-Variable in Graph Builder aus einer Liste in JSL?Das folgende Beispielskript erledigt, was ich für eine feste kleine Anzahl von Parametern benötige, die ich auf der Y-Achse darstellen möchte.
Wie kann dies für eine Liste automatisiert werden, die Y von oben bereitgestellt wird?
(Die X-Variable/Spalte bleibt fest, aber die Anzahl der Elemente, die an Y gehen, kann sich ändern und wird von einem anderen Skript bereitgestellt.)
Names Default To Here (1);
Clear Log ();
dt = open("$sample_data\Big Class.jmp");
y_values = {"name", "age", "sex", "weight"};
Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height),
Y( column(dt, y_values[1]) ),
Y( column(dt, y_values[2]) ),
Y( column(dt, y_values[3]) ),
Y( column(dt, y_values[4]) )
),
Elements( Position( 1, 1 ), Points( X, Y, Legend( 1 ) ) ),
Elements( Position( 1, 2 ), Points( X, Y, Legend( 2 ) ) ),
Elements( Position( 1, 3 ), Points( X, Y, Legend( 3 ) ) ),
Elements( Position( 1, 4 ), Points( X, Y, Legend( 4 ) ) )
);Außerdem, wie geht man in diesem Fall mit Elements() um?
Automatisierung und SkripterstellungWindowsBetreff: Wie übergebe ich eine Y-Variable in Graph Builder aus einer Liste in JSL?@hogi Vielen Dank, ich fürchte, ich brauche etwas mehr Handgriff, da ich die Funktionen Expr() und Insert NameExpr() noch nie zuvor verwendet habe. Es wäre nützlich, wenn Sie ein Beispiel mit dem Beispielskript bereitstellen könnten, das ich in meinem OP hinzugefügt habe.
Betreff: Wie übergebe ich eine Y-Variable in Graph Builder aus einer Liste in JSL?Dies ist nicht nur eine Möglichkeit, dies zu bauen, sondern kann auch einige Ideen liefern. Durchsuchen Sie auch den Skriptindex nach Variable und Element nach GraphBuilderbox
Names Default To Here(1);
dt = Open("$sample_data\Big Class.jmp");
y_values = {"name", "age", "sex", "weight"};
variables_expr = Expr(Variables(X(:height)));
For Each({y_col}, y_values,
temp_expr = Expr(Y());
Insert Into(temp_expr, Name Expr(AsColumn(dt, y_col)));
Insert Into(variables_expr, Name Expr(temp_expr));
);
gb_expr = Expr(Graph Builder(
Show Control Panel(0)
));
Insert Into(gb_expr, Name Expr(variables_expr));
For Each({y_col, idx}, y_values,
Eval(EvalExpr(
Insert Into(gb_expr,
Name Expr(Elements(Position(1, Expr(idx)), Points(X, Y, Legend(Expr(idx)))))
)
));
);
Show(Name Expr(gb_expr));
Eval(gb_expr);
Bearbeiten:
Ein Beispiel mit Add Variable()
Names Default To Here(1);
dt = Open("$sample_data\Big Class.jmp");
y_values = {"name", "age", "sex", "weight"};
variables_expr = Expr(Variables(X(:height)));
gb = dt << Graph Builder(
// Ignore Platform Preferences(1),
Show control Panel(0),
Variables(X(:height))
);
gb << inval;
For Each({y_col, idx}, y_values,
Eval(EvalExpr(
gb << Add Variable({Expr(Name Expr(As Column(dt, y_col))), Role("Y")})
));
// if you just want points, you shouldn't need this, but smoother idx is 2 instead of 1
/* gb << Remove Element(1, idx, 1);
Eval(EvalExpr(
gb << Add Element(1, Expr(idx), {Type("Points"), X, Y, Legend(Expr(idx))})
));
*/
);
gb << Update window;
gb << Remove Element(1, N Items(y_values), 2); // 1 or 2 for smoother idx, depending on how GB is builtBetreff: Wie übergebe ich eine Y-Variable in Graph Builder aus einer Liste in JSL?@jthi Danke. Das funktioniert bei mir, aber ich kann den Standardtitel des Diagramms nicht ändern. Wie geht das über JSL?
Betreff: Wie übergebe ich eine Y-Variable in Graph Builder aus einer Liste in JSL?Hängt davon ab, was Sie als Titel definieren.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Variables(X(:height), Y(:weight)),
Elements(Points(X, Y), Smoother(X, Y))
);
gb << Title("Test");
Und wenn Sie davon ausgehen, dass es sich um das Textbearbeitungsfeld über dem Graph Builder handelt, ändern Sie es manuell und ändern Sie dann das von JMP erstellte Skript.
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("asdsad")}))
und Sie können noch mehr Informationen erhalten, wenn Sie JMP17 haben und Eigenschaften verwenden

Also so etwas wie
Report(gb)[TextEditBox(1)] << Set Text("12313213");
könnte abhängig von Ihrem Bericht funktionieren
Betreff: Wie übergebe ich eine Y-Variable in Graph Builder aus einer Liste in JSL?@jthi Danke. Für den einfachen Fall, den Sie zeigen, weiß ich, wie man den Diagrammtitel setzt (wie Sie zeigen), aber wie macht man das für den Fall unten?
Names Default To Here(1);
dt = Open("$sample_data\Big Class.jmp");
y_values = {"name", "age", "sex", "weight"};
variables_expr = Expr(Variables(X(:height)));
For Each({y_col}, y_values,
temp_expr = Expr(Y());
Insert Into(temp_expr, Name Expr(AsColumn(dt, y_col)));
Insert Into(variables_expr, Name Expr(temp_expr));
);
gb_expr = Expr(Graph Builder(
Show Control Panel(0)
));
Insert Into(gb_expr, Name Expr(variables_expr));
For Each({y_col, idx}, y_values,
Eval(EvalExpr(
Insert Into(gb_expr,
Name Expr(Elements(Position(1, Expr(idx)), Points(X, Y, Legend(Expr(idx)))))
)
));
);
Show(Name Expr(gb_expr));
Eval(gb_expr);Betreff: Wie übergebe ich eine Y-Variable in Graph Builder aus einer Liste in JSL?Rufen Sie den Graph Builder auf und beide Ideen sollten funktionieren
Betreff: Wie übergebe ich eine Y-Variable in Graph Builder aus einer Liste in JSL?@jthi Danke, aber Get Reference () wird nicht im Scripting Index angezeigt (ich verwende JMP 16.2.0). Meinen Sie damit, den Fensternamen des Graph Builder-Fensters abzurufen?
Betreff: Wie übergebe ich eine Y-Variable in Graph Builder aus einer Liste in JSL?Current Report()[TextEditBox( 1 )] << set text( "NewTitle" );
Das funktioniert bei mir.
Betreff: Wie übergebe ich eine Y-Variable in Graph Builder aus einer Liste in JSL?Ich würde vorschlagen, die Referenz abzurufen, wenn Sie den Ausdruck auswerten, der das Diagramm erstellt. Ich finde
gb = Eval(gb_expr);
sollte arbeiten. Außerdem kann es sinnvoll sein, sicherzustellen, dass Graph Builder mit dt erstellt wird, wenn die Möglichkeit besteht, dass mehrere Tabellen geöffnet sind. Allerdings bin ich mir nicht sicher, welche Syntax in diesem Fall ohne Tests am einfachsten wäre
Betreff: Wie übergebe ich eine Y-Variable in Graph Builder aus einer Liste in JSL?Sie könnten die Symbole var und gb für die Ausdrücke generieren
Var= Expr(variables(x(:height)))
gb =Expr(Graph Builder())
Und dann verwenden Einfügen in in einem Für Schleife, um var mit dem Ys zu füllen, und dann einfügen NameExpr(var) hinein GB und dann ein anderes verwenden Für Schleife zum Hinzufügen der Elements-Ausdrücke.