Comment ajouter dynamiquement des instructions d'éléments à un graphique à l'aide de JSLSalut tout le monde, je suis relativement nouveau avec JMP et JSL, mais je suis assez familier avec le codage. J'essaie de créer un script JSL qui prend une liste de noms de paramètres (que je définis dans le tableau « PlotVars ») et les trace dans des tracés séparés sur le même graphique. Je souhaite que ce script fonctionne quel que soit le nombre de paramètres définis dans ce tableau (au cas où je souhaiterais ajouter ou soustraire des paramètres à chaque utilisation). Je peux le faire fonctionner (avec le code ci-dessous), mais tous les tracés utilisent par défaut des points, et je souhaiterais qu'ils utilisent une ligne à la place. Je comprends comment faire, c'est d'utiliser plusieurs instructions d'élément pour chaque position. Je pense que le problème vient de la deuxième ligne où j'initialise la variable « var_line ». Si je l'initialise avec Expr(), les instructions d'élément seront générées, mais elles ne seront pas exécutées correctement. Même chose si je les initialise avec Parse(). Je suis ouvert à toute suggestion pour résoudre ce problème. J'utilise JMP 18.
Modifier (jthi) : Ajout du formatage jsl
var_expr = Expr(
Variables(X(As Column("Start Alignment of " || DataSet_1)))
);
var_line = Expr();//Unable to dymanically add elements to the graph. still unsure why
For(i = 1, i <= N Items(PlotVars), i++,
Insert Into(var_expr, Eval Expr(Y(As Column(PlotVars[Expr(i)] || " of " || DataSet_1), )));
Insert Into(
var_expr,
Eval Expr(Y(As Column(PlotVars[Expr(i)] || " of " || DataSet_2), Position(Expr(i)), ))
);
Insert Into(
var_line,
Eval Expr(Elements(Position(1, Expr(i)), Line(X, Y(1), Y(2)), Legend(4)))
);
);
plot = Substitute(
Expr(
Data Table("Comparison of" || DataSet_1 || "with" || DataSet_2) <<
Graph Builder(Size(809, 629), Show Control Panel(0), vvv, yyy)
),
Expr(vvv), Name Expr(var_expr),
Expr(yyy), Name Expr(test)
);
Eval(plot);
<
var_expr = Expr(Variables(X( as column("Alignement de départ de " || DataSet_1) )));
var_line = Expr();//Impossible d'ajouter dynamiquement des éléments au graphique. Je ne sais toujours pas pourquoi
pour(i=1, i<=N éléments(PlotVars),i++,
Insérer dans(var_expr, Eval Expr(Y( comme colonne(PlotVars[expr(i)] || " de " || DataSet_1),)));
Insérer dans(var_expr, Eval Expr(Y( comme colonne(PlotVars[expr(i)] || " de " || DataSet_2), Position(expr(i)),)));
Insérer dans(var_line, Eval Expr(Elements(Position(1,expr(i)),Ligne(X,Y(1),Y(2)),Légende(4))));
);
plot = Substituer(
Expr(
Tableau de données( "Comparaison de" || DataSet_1 || "avec" ||DataSet_2 ) <<
Générateur de graphiques(
Taille (809, 629),
Afficher le panneau de configuration (0),
office de tourisme,
aaa
)),
Expr(vvv), Nom Expr(var_expr),
Expr(aaa), Nom Expr(test)
);
Évaluer(intrigue);
>
Automatisation et scriptsRe : Comment ajouter dynamiquement des instructions d'éléments à un graphique à l'aide de JSLÀ quoi souhaitez-vous que votre graphique ressemble ? À quoi ressemble le script créé avec JMP ? Comment se compare-t-il à votre script créé avec JSL ?
Data Table("Comparison of" || DataSet_1 || "with" || DataSet_2) <<
Graph Builder(
Size(809, 629),
Show Control Panel(0),
Variables(
X(As Column("Start Alignment of " || DataSet_1)),
Y(As Column(PlotVars[1] || " of " || DataSet_1)),
Y(As Column(PlotVars[1] || " of " || DataSet_2), Position(1)),
Y(As Column(PlotVars[2] || " of " || DataSet_1)),
Y(As Column(PlotVars[2] || " of " || DataSet_2), Position(2))
),
test
)
Il existe également de nombreux documents relatifs à ce générateur de graphes dynamique. Voici quelques enregistrements du Scripters Club : JSL dans Graph Builder , Répondre à tous : Comment créer un script de contenu dynamique pour Graph Builder
Re : Comment ajouter dynamiquement des instructions d'éléments à un graphique à l'aide de JSLLe script crée les graphiques exactement comme je le souhaite, sauf qu'il utilise des points/smoother dans les instructions d'élément (notez que les variables sont supprimées pour raccourcir le script). Voici le code graphique issu du script :
Graph Builder(
Size( 809, 629 ),
Show Control Panel( 0 ),
Variables(
...
)
),
Elements(
Position( 1, 1 ),
Points( X, Y( 1 ), Y( 2 ), Legend( 1 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 2 ) )
),
Elements(
Position( 1, 2 ),
Points( X, Y( 1 ), Y( 2 ), Legend( 3 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 4 ) )
),
Elements(
Position( 1, 3 ),
Points( X, Y( 1 ), Y( 2 ), Legend( 5 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 6 ) )
),
Elements(
Position( 1, 4 ),
Points( X, Y( 1 ), Y( 2 ), Legend( 7 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 8 ) )
),
Elements(
Position( 1, 5 ),
Points( X, Y( 1 ), Y( 2 ), Legend( 9 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 10 ) )
)
);
Et je préférerais qu'il utilise des lignes à la place :
Graph Builder(
Size( 696, 590 ),
Show Control Panel( 0 ),
Variables(
...
)
),
Elements( Position( 1, 1 ), Line( X, Y( 1 ), Y( 2 ), Legend( 11 ) ) ),
Elements( Position( 1, 2 ), Line( X, Y( 1 ), Y( 2 ), Legend( 12 ) ) ),
Elements( Position( 1, 3 ), Line( X, Y( 1 ), Y( 2 ), Legend( 13 ) ) ),
Elements( Position( 1, 4 ), Line( X, Y( 1 ), Y( 2 ), Legend( 14 ) ) ),
Elements( Position( 1, 5 ), Line( X, Y( 1 ), Y( 2 ), Legend( 15 ) ) )
);
Chaque fois que vous essayez d'insérer dans l'instruction d'éléments, une instruction d'éléments imbriquée est ajoutée au lieu d'instructions d'éléments séparées. De plus, le générateur de graphiques semble ignorer ces instructions d'éléments imbriqués.
Re : Comment ajouter dynamiquement des instructions d'éléments à un graphique à l'aide de JSL
Voir plus...
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
plotvars = {"NPN1", "NPN2", "NPN3", "NPN4", "PNP1"};
xcol = "wafer";
gb_expr = Expr(Graph Builder(Size(809, 629), Show Control Panel(0)));
var_expr = EvalExpr(Variables(X(Expr(NameExpr(As Column(dt, xcol))))));
For Each({colname, idx}, plotvars,
Insert Into(var_expr, Eval Expr(Y(Expr(NameExpr(As Column(dt, colname))))));
);
Insert Into(gb_expr, Name Expr(var_expr));
For(idx = 1, idx <= N Items(plotvars), idx++,
elem_expr = Substitute(
Expr(Elements(Position(1, _pos_), Line(X, Y, Legend(_lgnd_)))),
Expr(_pos_), idx,
Expr(_lgnd_), idx
);
Insert Into(gb_expr, Name Expr(elem_expr));
);
// Show(gb_expr);
gb = Eval(EvalExpr((Send(dt, Expr(gb_expr)))));
gb_expr = Graph Builder(
Size(809, 629),
Show Control Panel(0),
Variables(X(:wafer), Y(:NPN1), Y(:NPN2), Y(:NPN3), Y(:NPN4), Y(:PNP1)),
Elements(Position(1, 1), Line(X, Y, Legend(1))),
Elements(Position(1, 2), Line(X, Y, Legend(2))),
Elements(Position(1, 3), Line(X, Y, Legend(3))),
Elements(Position(1, 4), Line(X, Y, Legend(4))),
Elements(Position(1, 5), Line(X, Y, Legend(5)))
);
Re : Comment ajouter dynamiquement des instructions d'éléments à un graphique à l'aide de JSLGénial, cette idée a fonctionné. J'ai simplement dû insérer la commande « Éléments » au niveau du générateur de graphiques, sans essayer de créer une expression à part entière avec les commandes « Éléments ».