Expression du générateur de graphes de TaylorChère communauté,
Je voudrais créer un script de création de graphiques (je souhaite le mettre sous forme de script dans une nouvelle table) qui contient une longue liste de variables y.
Ma première approche a été d’essayer la manipulation d’expression, mais cela n’a pas fonctionné comme prévu.
Quelqu'un peut-il expliquer quelle serait une bonne façon d'écrire ce script ?
L'exemple ci-dessous contient également ma méthode actuelle, en créant l'instance GB et en ajoutant ensuite les variables y.
Merci et meilleures salutations,
Names Default To Here( 1 );
cdt = Open( "$SAMPLE_DATA\Big Class.jmp" );
col_lst = cdt << get column names( Continuous, "String" );
gb_expr = Expr(
cdt << Graph Builder(
Size( 534, 450 ),
Show Control Panel( 0 ),
Variables( X( :age ), Y( :height ) ),
Elements( Position( 1, 1 ), Points( X, Y, Legend( 4 ) ) ),
Elements( Position( 1, 2 ), Points( X, Y, Legend( 5 ) ) )
)
);
// this does not work, Expr() does not accept comma separated items
// Substitute Into( gb_expr, Expr( Y( :height ) ), Expr( Y( :height ), Y( :weight ) ) );
// gb_obj = gb_expr;
// this works
// creating GB instance
gb_obj = cdt << Graph Builder(
Size( 534, 450 ),
Show Control Panel( 0 ),
Variables( X( :age )),
Elements( Position( 1, 1 ), Points( X, Y, Legend( 4 ) ) ),
Elements( Position( 1, 2 ), Points( X, Y, Legend( 5 ) ) )
);
// adding Y's
For Each( {ycol}, col_lst, Eval( Parse( Eval Insert( "gb_obj << variables( Y(:^ycol^ ))" ) ) ) );
// this I would like to create directly, w/o large parse/eval parts, that are bad for maintenance
my_target_expression = gb_obj << get script();
Automatisation et scriptsRé: Expression du générateur de graphes de TaylorCe changement mineur pour utiliser Eval(Eval Expr()) pourrait-il vous fournir ce que vous voulez
Names Default To Here( 1 );
cdt = Open( "$SAMPLE_DATA\Big Class.jmp" );
col_lst = cdt << get column names( Continuous, "String" );
gb_expr = Expr(
cdt << Graph Builder(
Size( 534, 450 ),
Show Control Panel( 0 ),
Variables( X( :age ), Y( :height ) ),
Elements( Position( 1, 1 ), Points( X, Y, Legend( 4 ) ) ),
Elements( Position( 1, 2 ), Points( X, Y, Legend( 5 ) ) )
)
);
// this does not work, Expr() does not accept comma separated items
// Substitute Into( gb_expr, Expr( Y( :height ) ), Expr( Y( :height ), Y( :weight ) ) );
// gb_obj = gb_expr;
// this works
// creating GB instance
gb_obj = cdt << Graph Builder(
Size( 534, 450 ),
Show Control Panel( 0 ),
Variables( X( :age ) ),
Elements( Position( 1, 1 ), Points( X, Y, Legend( 4 ) ) ),
Elements( Position( 1, 2 ), Points( X, Y, Legend( 5 ) ) )
);
// adding Y's
For Each( {ycol}, col_lst,
Eval( Eval Expr( gb_obj << variables( Y( Expr( ycol ) ) ) ) )
);
// this I would like to create directly, w/o large parse/eval parts, that are bad for maintenance
my_target_expression = gb_obj << get script();Ré: Expression du générateur de graphes de TaylorSalut Jim,
merci, cela fonctionne aussi en utilisant eval/evalexpr.
Mais ma question était, comment pourrais-je construire cette gb_expr complète dans la partie supérieure,
Ce qui m'a le plus marqué, c'est que :
Substitute Into( gb_expr, Expr( Y( :height ) ), Expr( Y( :height ), Y( :weight ) ) );
n'a pas fonctionné.
Je souhaite donc remplacer plusieurs « Y(:c1), Y(:c2) … » dans l'expression du générateur de graphiques à l'aide de la manipulation d'expression (et non de la manipulation de chaîne).
Cordialement,
Ré: Expression du générateur de graphes de TaylorJe ne sais pas comment contourner le problème de substitution. Vous souhaiterez peut-être explorer les messages de l'index de script Graph Builder qui peuvent être transmis à Graph Builder

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = Graph Builder(
Variables( X( :sex ) ),
Elements( Points( X, Y ), Smoother( X, Y ) )
);
gb << Add Variable( {:height, Role( "Y" )} );
gb << Add Variable( {:weight, Role( "Y" )} );Ré: Expression du générateur de graphes de Taylor@Georg
En s'appuyant sur la suggestion de @txnelson concernant l'envoi de messages au générateur de graphiques, cela pourrait vous rapprocher de ce que vous recherchez :
Names Default To Here( 1 );
cdt = Open( "$SAMPLE_DATA/Big Class.jmp" );
col_lst = cdt << get column names( Continuous, "String" );
gb = Graph Builder(
Variables( X( :age ) ),
Elements( Points( X, Y ) )
);
for each( { yCol }, col_lst,
gb << Add Variable( { eval( yCol ), Role( "Y" ) } );
);
Le script de création de graphique résultant est :
Graph Builder(<BR />Variables( X( :age ), Y( :height ), Y( :weight ) ),<BR />Elements( Position( 1, 1 ), Points( X, Y, Legend( 1 ) ) ),<BR />Elements( Position( 1, 2 ), Points( X, Y, Legend( 2 ) ) )<BR />);
Ré: Expression du générateur de graphes de TaylorMerci à tous, ça à l'air bien !
Ré: Expression du générateur de graphes de TaylorJe n'utilise généralement pas de substitut pour cela, mais je les construis plutôt à l'aide d'expressions, ci-dessous une option, mais il existe d'autres options
Names Default To Here(1);
dt = Open("$SAMPLE_DATA\Big Class.jmp");
col_lst = cdt << get column names(Continuous, "String");
var_expr = Expr(Variables(X(:age)));
For Each({colname}, col_lst,
colname = "height";
Insert Into(var_expr, EvalExpr(Y(Expr(Name Expr(As Column(dt, colname))))));
);
gb_expr = EvalExpr(
dt << Graph Builder(
Size(534, 450),
Show Control Panel(0),
Expr(Name Expr(var_expr))
);
);
gb = Eval(gb_expr);
// gb << get script
gb << Save Script to Data Table("Plot");
Si vous souhaitez simplement utiliser Substitute, je pense que vous devrez substituer toute la partie Variables (ou éventuellement faire quelques astuces)
Names Default To Here(1);
cdt = Open("$SAMPLE_DATA\Big Class.jmp");
col_lst = cdt << get column names(Continuous, "String");
gb_expr = Expr(
cdt << Graph Builder(
Size(534, 450),
Show Control Panel(0),
Variables(X(:age), Y(:height)),
Elements(Position(1, 1), Points(X, Y, Legend(4))),
Elements(Position(1, 2), Points(X, Y, Legend(5)))
)
);
Substitute Into(gb_expr, Expr(Variables(X(:age), Y(:height))), Expr(Variables(X(:age), Y(:height), Y(:weight))));
show(gb_expr);