Comment transmettre la variable Y dans Graph Builder à partir d'une liste en JSL ?L'exemple de script ci-dessous fait ce dont j'ai besoin pour un petit nombre fixe de paramètres que je souhaite tracer sur l'axe Y.
Comment automatiser cela pour une liste fournie à Y par le haut ?
(La variable/colonne X reste fixe mais le nombre d'éléments allant à Y peut changer et est fourni à partir d'un autre script)
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 ) ) )
);Aussi, comment gérer les Elements () dans ce cas.
Automatisation et scriptsles fenêtresRe : Comment transmettre la variable Y dans Graph Builder à partir d'une liste en JSL ?@hogi Merci, j'ai bien peur d'avoir besoin d'un peu plus de main car je n'ai jamais utilisé les fonctions Expr() et Insert NameExpr() auparavant. Il serait utile que vous puissiez fournir un exemple avec l'exemple de script que j'ai ajouté dans mon OP.
Re : Comment transmettre la variable Y dans Graph Builder à partir d'une liste en JSL ?Ce n'est pas seulement une option pour construire cela, mais cela peut donner quelques idées. Recherchez également dans l'index de script la variable et l'élément pour 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);
Modifier:
Un exemple utilisant 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 builtRe : Comment transmettre la variable Y dans Graph Builder à partir d'une liste en JSL ?@jthi Merci. Cela fonctionne pour moi, mais je ne peux pas modifier le titre du graphique par défaut. Comment faire cela via JSL ?
Re : Comment transmettre la variable Y dans Graph Builder à partir d'une liste en JSL ?Cela dépend de ce que vous définissez comme titre.
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");
Et si vous considérez qu'il s'agit de la zone d'édition de texte au-dessus du générateur de graphiques, modifiez-la manuellement, puis modifiez le script créé par JMP.
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("asdsad")}))
et vous pouvez obtenir encore plus d'informations si vous disposez de JMP17 et utilisez les propriétés

Donc quelque chose comme
Report(gb)[TextEditBox(1)] << Set Text("12313213");
pourrait fonctionner en fonction de votre rapport
Re : Comment transmettre la variable Y dans Graph Builder à partir d'une liste en JSL ?@jthi Merci. Pour le cas simple que vous montrez, je sais comment mettre le titre du graphique (comme vous le montrez), mais comment faire cela pour le cas ci-dessous ?
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);Re : Comment transmettre la variable Y dans Graph Builder à partir d'une liste en JSL ?Obtenez une référence au générateur de graphiques et ces deux idées devraient fonctionner
Re : Comment transmettre la variable Y dans Graph Builder à partir d'une liste en JSL ?@jthi Merci mais je ne vois pas Get Reference () dans Scripting Index (je suis sur JMP 16.2.0). Voulez-vous dire obtenir le nom de la fenêtre du générateur de graphiques ?
Re : Comment transmettre la variable Y dans Graph Builder à partir d'une liste en JSL ?Current Report()[TextEditBox( 1 )] << set text( "NewTitle" );
Cela fonctionne pour moi.
Re : Comment transmettre la variable Y dans Graph Builder à partir d'une liste en JSL ?Je suggérerais d'obtenir la référence lorsque vous évaluez l'expression qui crée le graphique. Je pense
gb = Eval(gb_expr);
devrait marcher. Il peut également être judicieux de s'assurer que Graph Builder est créé à l'aide de dt s'il est possible que plusieurs tables soient ouvertes. Bien que je ne sois pas sûr quelle serait la syntaxe la plus simple pour le faire dans ce cas sans tester
Re : Comment transmettre la variable Y dans Graph Builder à partir d'une liste en JSL ?Vous pouvez générer des symboles var et gb pour les expressions
Var= Expr(variables(x(:height)))
gb =Expr(Graph Builder())
Et puis utilisez Insérer dans dans un Pour boucle pour remplir var avec le Ys , puis insérer NomExpr(var) dans go puis utilisez-en un autre Pour boucle pour ajouter les expressions Elements.