Envoyer des commandes à plusieurs tracés bivariésJ'ai un script qui génère une série de tracés bivariés dans une seule fenêtre, en utilisant un LineUpBox pour contenir chaque tracé.Une fois les tracés créés, je souhaite que l'utilisateur puisse activer/désactiver les points du tracé (j'ai l'intention d'ajouter d'autres options... cela ne sert qu'à titre d'exemple).J'envisage une case à boutons ou une case à cocher dans la fenêtre sur laquelle l'utilisateur peut cliquer, et tous les tracés refléteront cette action.
Pour un seul tracé, j'utiliserais la commande :
bvp << Show Points(0/1);
où bvp est la référence au diagramme bivarié.Cependant, ici, j'ai plusieurs parcelles et je ne peux pas utiliser une seule référence pour toutes.J'ai essayé de faire référence à ma LineUpBox qui contient les parcelles à la place :
For(plid = 1, plid <= nplots, plid++,
LUB_plots[plid] << Show Points(pts)
)
où LUB_plots est la référence à ma lineupbox.Cette boucle serait exécutée chaque fois que l'utilisateur coche la case, par exemple.Lorsque je fais cela, j'obtiens les erreurs suivantes :
The display box 'OutlineBox' does not recognize the message 'Show Points'; perhaps you mean one of these: <<Show Properties <<Show HelpKeys <<SetHorizontal <<Horizontal <<SetOpen <<GetHorizontal <<Close Where No Outlines <<Font <<Set Font <<Set Font Style <<Set Font Size <<Reshow <<Set Report Title <<Set Window Title <<Top Parent <<Show Tree Structure <<Restore Window Size <<Set Window Size <<Set Content Size <<Get Window Position <<Show Window <<Get Show Window <<Set Window Title <<Set Window Icon <<Set Print Headers <<Set Print Footers <<Scroll Window <<Set Width <<Set Height <<Horizontal Alignment.
et une instance de ce qui suit pour chaque parcelle :
(The following message might not be an actual error; the preference 'Report Invalid Display Box Messages' is ON.) The display box 'OutlineBox' does not recognize the message 'Show Points'.
J'ai vérifié l'arborescence et je confirme que oui, la zone d'affichage supérieure est bien une zone de contour.Donc, au moins, je sais que LineUpBox [plid] vise là où je m'y attendais.Le problème semble être que ma commande <
Ma question : comment puis-je référencer plusieurs graphiques bivariés ?Sinon, existe-t-il un meilleur moyen d'envoyer des commandes à plusieurs tracés bivariés après leur création ?Peut-être en utilisant une sorte de structure de commande Dispatch/SendtoReports ?
Je ne sais même pas comment rechercher la communauté pour celui-ci.Toute aide est appréciée.
Re : Envoyer des commandes à plusieurs tracés bivariésMerci encore.Élégant.
Re : Envoyer des commandes à plusieurs tracés bivariésCette syntaxe semble fonctionner :
y_axes = (lub << xpath("//AxisBox[@charID='2']"));
y_axes << scale(Log);
Pour la documentation xpath, voir par exemple tutoriel w3schools sur XPath
Re : Envoyer des commandes à plusieurs tracés bivariésMerci!Le xpath cmd fonctionne très bien pour mon exemple de points d'exposition.
Maintenant, j'ai un suivi.Comment puis-je envoyer une commande à tous mes tracés qui change l'axe des ordonnées de linéaire à log?Pour commencer, j'ai essayé d'utiliser la commande xpath dans le but de créer une liste de toutes les références à toutes les cases de l'axe y.J'essaie d'abord de confirmer que la commande xpath extrait les bonnes références.Mais je n'arrive pas à le faire retourner uniquement ces boîtes.En inspectant le code xml dans le journal, j'ai pu voir que les cases de l'axe y avaient toutes un "charID=\!"2\!"", donc j'essaie de l'utiliser pour différencier les y des x, mais non chance.
Names Default To Here(1);
//Example report
Open("$SAMPLE_DATA/Big Class.jmp");
Try(Window("example") << Close Window);
nw = New Window("example",
lub = Lineup Box(
Bivariate(Y(:weight), X(:height), FitLine()),
Bivariate(Y(:weight), X(:age), FitLine()),
Bivariate(Y(:age), X(:age), FitLine()),
Bivariate(Y(:weight), X(:weight), FitLine())
)
);
Show(lub << Get xml);
Show(lub << xpath("//AxisBox")); //list of 8 displayboxes
Show(lub << xpath("//AxisBox[2]")); //empty list
Show(lub << xpath("//AxisBox['2']")); //list of 8 displayboxes
Show(lub << xpath("//AxisBox[\!"2\!"]")); //list of 8 displayboxes
Show(lub << xpath("//AxisBox[charID=\!"2\!"]")); //empty list
Show(lub << xpath("//AxisBox[\!"charID=2\!"]")); //list of 8 displayboxesComment puis-je faire en sorte que xpath ne renvoie que les 4 axes y?
Une fois que j'ai réussi à générer les références aux boîtes d'axe spécifiques que je veux, dois-je envoyer la commande "Get Scriptable Object" comme dans votre exemple précédent, ou puis-je simplement envoyer la commande "Scale" directement à la liste des références ?
J'ai lu la présentation JMP Summit et les exemples de code .jsl que vous avez fournis... très utiles.Cependant, la documentation supplémentaire est rare dans l'index de script et semble inexistante dans le guide de script.Existe-t-il plus de documentation disponible sur xpath ?J'aimerais savoir quel est le format de l'entrée.Par exemple, que fait le "//" au début ?Et comment dois-je formater le reste de l'entrée pour obtenir les boîtes d'affichage dont j'ai besoin ?
Merci.
Re : Envoyer des commandes à plusieurs tracés bivariésOu beaucoup plus simple avec xpath , inspiré d'une présentation JMP Summit qui vient d'être publiée ici :
Names Default To Here(1);
//Example report
Open("$SAMPLE_DATA/Big Class.jmp");
nw = New Window("example",
lub = Lineup Box(
Bivariate(Y(:weight), X(:height), FitLine()),
Bivariate(Y(:weight), X(:age), FitLine()),
Bivariate(Y(:age), X(:age), FitLine()),
Bivariate(Y(:weight), X(:weight), FitLine())
)
);
//Make list of plots
L = (lub << xpath("//LineUpBox/OutlineBox")) << get scriptable object;
// Send messages to all plots, e.g
L << show points(0);
Re : Envoyer des commandes à plusieurs tracés bivariésLe afficher les points() message doit être envoyé au Bivarié objet plutôt qu'à sa zone d'affichage supérieure. A partir d'un arbre d'affichage existant, une référence à l'objet associé peut être obtenue en < .
Un exemple qui illustre également une manière d'envoyer des messages à plusieurs parcelles :
Names Default To Here(1);
//Example report
Open("$SAMPLE_DATA/Big Class.jmp");
New Window("example",
lub = Lineup Box(
Bivariate(Y(:weight), X(:height), FitLine()),
Bivariate(Y(:weight), X(:age), FitLine()),
Bivariate(Y(:age), X(:age), FitLine()),
Bivariate(Y(:weight), X(:weight), FitLine())
)
);
//Make list of plots (here top-level Outline boxes)
L = {};
i = 1;
While(Is Scriptable(Try(lub[Outline Box(i)])),
If((lub[Outline Box(i)] << parent) << classname == "LineUpBox",
Insert Into(L, lub[Outline Box(i)] << get scriptable object)
);
i++;
);
// Send messages to all plots, e.g
L << show points(0);