Salut à tous,
Je suis en train de créer des scripts dans Application Builder. Dans l'un de mes modules, j'ai une boîte graphique, avec l'intention de la configurer pour afficher un graphique prédéfini, mais je n'ai pas beaucoup de chance. Je pensais à l'origine que la chose la plus simple à faire serait simplement d'intégrer mon graphique pré-fait dans la fenêtre du module, alors j'ai essayé d'utiliser la Graph Box comme espace réservé, en essayant quelque chose comme:
graphBox << Visibility("Collapse");
panelBox << Append( /*graph*/ ) );... mais cela n'a pas fonctionné. Potentiellement, le moyen le plus simple consiste en fait à écrire individuellement les différents éléments de graphique dans la zone de graphique ? Je suis assez nouveau dans JSL, donc je sais que mon approche/syntaxe doit être erronée d'une certaine manière, mais je ne sais pas quelle serait la meilleure/la plus simple façon de le faire !
Le code pour créer le graphique que je veux (merci aux utilisateurs utiles sur une autre question que j'ai posté ) est:
Names Default To Here(1);
datafile = Open( "Data.xlsx" );
x_col = Column(datafile, 1);
y_cols = (datafile << Get Column Names())[2::N Cols(datafile)];
var_expr = EvalExpr(
Variables(X(Expr(x_col))
));
var_line = Expr(Line(X));
For Each({col, idx}, y_cols,
y_expr = Expr(Y(Position(1)));
Insert Into(y_expr, NameExpr(col), 1);
Insert Into(var_expr, Name Expr(y_expr));
yline_expr = Parse("Y("||char(idx)||")");
Insert Into(var_line, Name Expr(yline_expr));
);
graphbuild = Eval(Substitute(
Expr(
graphbuild = datafile << Graph Builder(
Size(838, 391),
Show Control Panel(0),
vvv,
Elements(yyy)
)
),
Expr(vvv), Name Expr(var_expr),
Expr(yyy), Name Expr(var_line)
));
/*gb_image = graphbuild << get picture;
graphbuild << Close Window;
New window("time-series plot",
gb_image
);*/J'ai commenté la dernière partie de ce code, car je préfère en fait le graphique résultant avec le panneau de configuration simplement supprimé ("Afficher le panneau de configuration (0)"), par opposition à "<< Obtenir l'image", car cela masque le générateur de graphiques fonctionnalités pour l'utilisateur, mais permet toujours un graphe dynamique (axes saisissables et mobiles, etc.). S'il est possible d'intégrer le graphique de cette manière, c'est mon itinéraire idéal.
J'apprécie toute aide.
Merci,
Estelle
Salut Estelle - Je vais donner une solution qui peut être utile pour les rapports de script, que vous soyez dans Application Builder ou que vous écriviez directement dans JSL.Lorsque vous lancez des plates-formes sans fenêtre contenante, la fenêtre est créée pour vous.Une plate-forme "en direct" ne peut avoir qu'un seul rapport, donc si vous essayez d'ajouter un rapport à une fenêtre existante, une copie du rapport est créée.C'est un peu plus interactif que de créer une image, mais ce n'est pas non plus ce que vous recherchez.
Dans l'exemple de script ci-dessous, je montre trois manières d'ajouter du contenu à une fenêtre existante, et les résultats ont différents niveaux d'interactivité :
- Dans le premier cas, une plate-forme live Graph Builder est intégrée directement dans une fenêtre existante.La plate-forme ne crée pas d'autre fenêtre et aucune copie n'est effectuée.
- Dans la deuxième fenêtre, une copie du rapport est ajoutée, ce qui a moins d'interactivité.Il s'agit d'une copie du rapport lui-même, sans objet de plate-forme.Il n'a aucun lien avec la table de données.
- Dans la troisième fenêtre, j'ajoute une image du Graph Builder, qui a le moins d'interactivité.
// Create an empty window first
New Window("Interactive Report",
panel = Panel Box("Interactive Report")
);
Wait(2);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Append a Graph Builder to the existing window
// This report will be entirely interactive
// Axes can be changed, and points can be selected
panel << Append(gb = dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
));
// We could try to create windows from existing platforms
// This will lose some interactivity
// Axes can change, but the selection is fixed
New Window("Report Copy",
panel2 = Panel Box("Report Copy",
)
);
Wait(2);
panel2 << Append(Report(gb)); // creates a copy of the report
// Or we could take a picture of the report
// This is the least interactive result - nothing can change
New Window("Report Picture",
panel3 = Panel Box("Report Picture",
)
);
Wait(2);
panel3 << Append(gb << Get Picture);<BR />
Dans une application JMP, vous devez être en mesure d'utiliser l'une de ces approches.La première approche vous permettrait d'ajouter à n'importe quelle boîte que vous avez créée dans l'application, assurez-vous simplement que vous exécutez le script Graph Builder dans le message <