Salut. Existe-t-il une méthode pour obtenir les noms et rôles des variables utilisés dans une fenêtre de création de graphe ? Supposons que j'ai une fenêtre contenant un tracé de générateur de graphique. Existe-t-il un moyen de déterminer par programmation quelle variable a été utilisée pour X, Y, Xgroup, Ygroup, etc. ?
Par exemple, supposons que l'utilisateur crée un tracé en gb. Maintenant, ils souhaitent exécuter un script généralisé sur l'intrigue (par exemple, un script graphique). Le script doit savoir quelles variables ont été utilisées dans quels rôles sans que l'utilisateur ne le dise.
Supposons que je commence par ce tracé:
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))
);
Maintenant, je souhaite exécuter un script sur l'intrigue résultante. Mon script ne sait pas ce qui est contenu dans l'intrigue. Voici 2 choses que j'ai essayées mais qui n'ont pas fonctionné :
Names Default to Here(1);
//Try to get script used to create plot
win = Window(1); //gets most recent window clicked on
gb = win << Report; //DNW: returns missing (win is not a platform)
scr = gb << Get Script; //from here I could parse the string to determine the roles
//Another stab: try to read the XML
win = Window(1);
str = win << Get XML; //This gives me the XML of the window, but does not provide the actual variable names used in the roles.
Si je pouvais comprendre comment convertir la référence de fenêtre en un rapport, je pense que je pourrais faire fonctionner cette première méthode. Des idées?
</CODE></P></LINGO-BODY><LINGO-LABS id="lingo-labs-272624" slang="en-US" mode="NONE"><LINGO-LABEL>Script</LINGO-LABEL></LINGO-LABS><LINGO-SUB id="lingo-sub-273136" slang="en-US" mode="NONE">Re : Obtenir les noms de variables de graphbuilder</LINGO-SUB><LINGO-BODY id="lingo-body-273136" slang="en-US" mode="NONE">Merci. C'était exactement ce dont j'avais besoin.</LINGO-BODY><LINGO-SUB id="lingo-sub-273026" slang="en-US" mode="NONE">Re : Obtenir les noms de variables de graphbuilder</LINGO-SUB><LINGO-BODY id="lingo-body-273026" slang="en-US" mode="NONE"><P><A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/3648" target="_blank">@nikles</A> vous avez raison, la fonctionnalité d'étiquette de survol est basée sur l'interactivité. Il existe des moyens de déclencher cela en utilisant JSL (en déplaçant la souris, en faisant une pause, etc.), mais cela ajouterait beaucoup de complexité à la solution dont vous n'avez vraiment pas besoin.</P>
<P>Sur la base de votre réponse et de la solution proposée par<A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/2687" target="_blank"> @txnelson</A> , voici un script qui vous emmènera de la référence des fenêtres jusqu'aux références des variables de Graph Builder.</P>
<PRE><CODE class=" language-jsl">Names Default to Here(1);
win = New Window("A Title", // Let's create a Window that contains a Graph Builder
Graph Builder( // with a LDF to make things interesting (multiple OutlineBoxes).
Size( 517, 448 ),
Show Control Panel( 0 ),
Variables( X( :sex ), Y( :height ) ),
Elements( Bar( X, Y, Legend( 6 ) ) ),
Local Data Filter(
Add Filter( columns( :height ), Where( :height >= 60.048 & :height <= 70 ) )
)
));
ob = win[OutlineBox("Graph Builder")]; // This is how you get the Display Box that contains the GB object
gbb = ob << Get Scriptable Object; // Now we extract the GB object from the Display Box
gb_expr = gbb << Get Script; // You could wrap in Char() to get the GB script as a string
gb_nargs = NArg(gb_expr); // and use pattern matching. Instead,
for(i = 1, i <= gb_nargs, i++, // let's see how to inspect it as an expression.
child = Arg(gb_expr, i);
If (HeadName(child) == "Variables",
var_nargs = NArg(child);
for(j = 1, j <= var_nargs, j++,
Show(Arg(child, j))
);
Break();
)
);
tu devrais voir:
Arg(child, j) = X(:sex);
Arg(child, j) = Y(:height);
Les extensions Hover Label ajoutées dans JMP 15 permettent de définir un script qui sera exécuté dans le contexte d'un graphe (un Hover Label Execution Context pour être précis). Ce contexte fournit des informations dans les variables locales sur l'élément visuel survolé, y compris les variables utilisées comme "groupements" (X, GroupX, GroupY, etc.) et les mesures (Y, Color, Size, etc.).
Vous pouvez accéder à ces variables dans votre propre script et éventuellement les utiliser pour définir une nouvelle visualisation ou analyse. C'est précisément ainsi que fonctionnent les préréglages d'étiquette de survol. Vous voudrez peut-être en sélectionner un, puis jeter un œil au code JSL généré dans l'éditeur d'étiquette de survol (ou en enregistrant le script) pour voir un exemple.
Vous pouvez également voir leurs valeurs en utilisant le préréglage "contexte" de Textlet (disponible dans le panneau Textlet de l'éditeur d'étiquette de survol) :

Une liste complète des variables mises à disposition dans le contexte d'exécution est donnée ici.
Je pensais me souvenir d'une question précédente à ce sujet, mais j'ai cherché et je n'en ai pas trouvé.Quoi qu'il en soit, la méthode que j'ai utilisée pour faire ce genre de chose consiste à envoyer un message à Graph Builder pour récupérer le script utilisé pour créer l'affichage, dans une variable de caractère, puis j'analyse la chaîne pour trouver les variables mentionnées .
Le script
names default to here(1);
dt=open("$SAMPLE_DATA/big class.jmp");
gb = Graph Builder(
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 6 ) ), Smoother( X, Y, Legend( 7 ) ) )
);
theScript = char(gb << get script);
show(theScript);
récupère :
theScript = "Graph Builder(Variables(X(:weight), Y(:height)), Elements(Points(X, Y, Legend(6)), Smoother(X, Y, Legend(7))))";