Salut. Je suis intéressé de savoir qu'il existe une méthode de script pour lire les valeurs affichées pour un axe dans graphbuilder et les renvoyer sous forme de liste. IOW, existe-t-il une fonction ou un message qui peut "obtenir" les valeurs d'axe à partir d'une référence graphbuilder ou d'une boîte d'axe ? Quelque chose comme : xval_lis = gb << Obtenir les valeurs de l'axe X.
Par exemple, supposons que j'ai le graphique suivant :

dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Size(513, 406),
Show Control Panel(0),
Back Color("White"),
Variables(X(:age), X(:sex, Position(1)), Y(:weight)),
Elements(Points(X(1), Y, Legend(1)), Smoother(X(1), Y, Legend(2))),
Local Data Filter(
Add Filter(
columns(:age),
Where(:age == {12, 13, 14}),
Display(:age, Size(170, 96), List Display)
)
),
SendToReport(Dispatch({}, "", AxisBox, {Select}))
)Ici, étant donné que l'utilisateur a exclu certains âges à l'aide du filtre de données local, tous les âges du tableau ne sont pas affichés sur l'axe des x. Dans ce cas, je voudrais un moyen de lire quels âges sont réellement affichés dans le graphique. Cette question s'applique uniquement lorsqu'une variable de type nominal ou ordinal est utilisée pour l'axe (pas de variables continues).
J'ai considéré la méthode de script suivante:
1. Lire le filtre de données local
2. Créez une table de sous-ensemble contenant uniquement les lignes non filtrées
3. Utilisez la fonction Résumer sur cette table pour obtenir ma liste des valeurs d'axe affichées
ldf_str = ldf << Get Where Clause; //ldf = reference to local data filter in gb window
clause = Parse(Regex(ldf_str, "Select Where\((.+)\)$", "\1"));
r = dt << Get Rows Where(Eval(clause)); //dt = ref to main datable
dtsub = dt << Subset(//Invisible,
Selected Rows(0),
Rows(r),
Selected columns only(0)
);
Summarize(dtsub, xlev_lis = By(:age, :sex));
Cette méthode semble cependant peu maniable. Existe-t-il une commande qui peut "obtenir" les valeurs d'axe à partir d'une référence graphbuilder ou d'une boîte d'axe ?
@nikles ,
Vous n'êtes pas sûr de votre scénario d'utilisateur, cependant, si l'utilisateur filtre activement, il peut également modifier la structure de GraphBuilder, les différents rôles, etc. Gestionnaire de changement de filtre serait plus robuste. Notez également que la clause Where () ne capture pas l'inverse. Le script et la TextBox du Where capturent l'inverse comme un Not (!)

Ci-dessous et en pièce jointe se trouve un script qui récupère les Xticks et les imprime dans le journal lorsque le filtre change.Voici une capture d'écran du journal intégré avec des commentaires (//) et des sauts de ligne supplémentaires.

Names Default to Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Size(513, 406),
Show Control Panel(0),
Back Color("White"),
Variables(X(:age), X(:sex, Position(1)), Y(:weight)),
Elements(Points(X(1), Y, Legend(1)), Smoother(X(1), Y, Legend(2))),
Local Data Filter(
Add Filter(
columns(:age),
Where(:age == {12, 13, 14}),
Display(:age, Size(170, 96), List Display)
)
),
SendToReport(Dispatch({}, "", AxisBox, {Select}))
);
//iftb = (report(gb)[PictureBox(1)]<<SIB></SIB>
Remarques:
- La ligne 20 est commentée ; il montre comment obtenir un handle vers le Where TextBox.
- Les principales caractéristiques de la fonction f utilisée pour le gestionnaire de changement de filtre sont les capacités de l'implémentation JMP du tableau associatif : plusieurs méthodes pour le définir ; pour obtenir des valeurs uniques dans une liste ; presque n'importe quel objet JMP peut être utilisé comme clé.
- Les autres fonctionnalités clés sont : dt[ zz, _xvar_] est une liste de valeurs de ligne et ldf << récupère les lignes filtrées.