Les graphiques JMP peuvent-ils avoir cet effet ?C'est l'effet HTML.
Le graphlet JMP peut-il obtenir cet effet ?
Merci!

Automatisation et scriptsFenêtresRe : Les graphiques JMP peuvent-ils avoir cet effet ?
@hogi wrote:
Comment puis-je accéder à cet espace de noms ?
Les deux:
Report(gb)[FrameBox(1)] << get namespace() ;
(Report(gb)[FrameBox(1)] << find seg(TopSeg (1))) << get namespace();
produire un nouvel espace de noms.
... J'ai demandé le support JMP : TS -00173810
malheureusement:
Toine peut pas accéder le graphique scénario espace de noms extérieurement.
Re : Les graphiques JMP peuvent-ils avoir cet effet ?Aïe, bien sûr - Comment dessine-t-on un cercle ?
Re : Les graphiques JMP peuvent-ils avoir cet effet ?La poignée est là. Le cercle ne l'est pas. Je *pense* que le cercle parfaitement rond sur la grille non carrée a son rayon défini dans les coordonnées de l'axe Y.
Re : Les graphiques JMP peuvent-ils avoir cet effet ?Intéressant. Pourquoi la poignée n'est-elle pas liée au système de coordonnées x/y ?
Cela fonctionne toujours après avoir redimensionné le tracé, mais il y a un décalage important :
Re : Les graphiques JMP peuvent-ils avoir cet effet ?-
Re : Les graphiques JMP peuvent-ils avoir cet effet ?vous pouvez utiliser des arguments de fonction au lieu de x, y
Names Default To Here( 1 );
New Window( "Example",
trapx = 20;
trapy = 50;
handx = 70;
handy = 80;
trapcolor="blue";
handcolor="blue";
Graph Box(
Frame Size( 200, 200 ),
handle( handx, handy, // any handle(s) must come before Mousetrap
Function( {a, b}, handx=a; handy=b;
Write( Eval Insert( "\!nhand drag ^a^ ^b^" ) );
handcolor="magenta"; )
, // the mouse-up handler
Function( {a, b}, handx=a; handy=b;
Write( Eval Insert( "\!nhand release ^a^ ^b^" ) );
handcolor="cyan"; )
);
Mousetrap( // should not be more than one Mousetrap, the first one captures all clicks
Function( {a, b}, trapx=a; trapy=b;
Write( Eval Insert( "\!ntrap drag ^a^ ^b^" ) );
trapcolor="red"; )
, // the mouse-up handler
Function( {a, b}, trapx=a; trapy=b;
Write( Eval Insert( "\!ntrap release ^a^ ^b^" ) );
trapcolor="green"; )
);
// the drawing occurs outside of the mousetrap or handle
pencolor(trapcolor);
pensize(3);
Circle( {0, 0}, Sqrt( trapx * trapx + trapy * trapy ) );
pencolor(handcolor);
pensize(3);
Circle( {0, 0}, Sqrt( handx * handx + handy * handy ) );
)
);
Si vous avez besoin d'une ou plusieurs poignées, elles doivent apparaître avant la souricière car un clic sera consommé par la souricière si aucune poignée précédente ne l'a pris.
Re: Les graphismes JMP peuvent-ils avoir cet effet ?
D'accord, UN espace de noms partagé par Framebox - distinct de l'espace de noms mondial
- et distinct de l'espace de noms des autres FrameBoxes.
Édit : Waouh, une interprétation complètement erronée des résultats.
::x= 5;
(Report( gb )<< xpath("//FrameBox")) << add graphics script(//
If(Not( Is Empty( x ) ), // if the mouse did not yet enter the graph -> do nothing.
Caption("global x is "|| Char(::X));
V Line(x+3);
)
//
);
Autre constatation – à la fin de la vidéo :
Le redimensionnement de la fenêtre déclenche une réinitialisation du graphique avec les valeurs d'origine de l'espace de noms Ici .
Comment accéder à cet espace de noms ?
Les deux:
Report(gb)[FrameBox(1)] << get namespace() ;
(Report(gb)[FrameBox(1)] << find seg(TopSeg (1))) << get namespace();
créer un nouvel espace de noms.
Re : Les graphiques JMP peuvent-ils avoir cet effet ?Je viens de trouver cette information dans l'index des scripts :

les coordonnées x et y sont stockées comme variables globales pour l'exécution du script.
Et toutes les variables globales préexistantes x et y sont restaurées après l’exécution du script.
C'est ici que l'histoire pourrait se terminer.
Décommenter le
// x=y=60;
permet au graphique de commencer avec une ligne à x = 60. -> le script utilise la variable locale de l' espace de noms Here .
Ce qui m'a surpris :
Lorsque j'essaie de faire glisser la ligne vers un autre emplacement, cela fonctionne !
Pourquoi est-ce surprenant :
x à l'intérieur de l'espace de noms Here reste à 60. Et le script préférera les variables de l'espace de noms Here aux variables de l'espace de noms global. [Edit : pour les variables globales, les valeurs d'origine doivent être "restaurées" à ce stade : après l'exécution de MouseTrap]. Alors, pourquoi le script fonctionne-t-il ?!
Il semble qu'à l'intérieur du script, il y ait des variables locales x et y qui sont utilisées de préférence - à la place des variables de l'espace de noms Here . Cette interprétation est-elle correcte ?
Ensuite, sous la ligne, c'est très gentil de la part de JMP de faire l'effort supplémentaire avec les variables globales. De cette façon, même les fonctions qui se trouvent en dehors du contexte du script graphique (myfunctions:xy ) peuvent accéder aux variables 
peut-être intéressant de vérifier :
Scripts graphiques d'une FrameBox - partagent-ils un espace de noms commun ou chaque script graphique utilise-t-il son propre ...
Re : Les graphiques JMP peuvent-ils avoir cet effet ?JE VOIS
Merci Craig!
Re : Les graphiques JMP peuvent-ils avoir cet effet ?@hogi MouseTrap est une chose étrange dans JSL. C'est une fonction qui ne fait rien lorsqu'elle est exécutée et n'a pas d'importance si elle est exécutée ou non ou (principalement) où elle est positionnée dans le script. Lorsqu'un mouvement de souris se produit sur le graphique, les coordonnées sont envoyées au script dans x, y qui doivent être copiées dans les globales comme indiqué.
La poignée et les différentes variantes de glissement ont une position qui leur est associée et ne s'activeront que si elles sont suffisamment proches. L'ordre a son importance, un peu, car le premier élément rencontré dans le script qui est suffisamment proche (quelques pixels) recevra la mise à jour.
Je ne peux pas expliquer complètement pourquoi cela fonctionne avec votre changement. X ne devrait vraiment pas exister... il semble qu'il échappe à la souricière !
J'ai réparé le script dans mon premier post.
Re : Les graphiques JMP peuvent-ils avoir cet effet ?Il semblerait que l'on ajoute un script d'exercice de survol.
For(iFrame=1,iFrame<=N Items(framelist),iFrame+=1,frame=framelist[iFrame]; Eval(Eval Expr(frame<<ADDGRAPHICSSCRIPT></ADDGRAPHICSSCRIPT>
Thanks Experts!
Re : Les graphiques JMP peuvent-ils avoir cet effet ?@Craige_Hales , sympa, très fluide ! 
Presque trop lisse : j’espère que cet exemple n’empêchera pas les développeurs d’implémenter une approche non-JSL.
quelques arguments pour un support natif via Graph Builder :
- rendre le générateur de graphiques natif plus puissant
- rendre également heureux les utilisateurs non-JSL
- afficher les annotations fantaisie automatiques même sans clics de souris
-> permettre aux utilisateurs d'utiliser la souris comme d'habitude pour sélectionner des points de données
(avec l'approche « JSL » actuelle, on pourrait ajouter des boutons à bascule pour choisir le mode correct - comme c'est le cas pour le diagramme de Venn )
Il m’a fallu un certain temps pour comprendre le message d’erreur !
Names default to here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
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 ) ) )
);
// x=y=60;
fb = Report( gb )[FrameBox( 1 )];
fb << addgraphicsscript(//
If(Not( Is Empty( x ) ), // if the mouse did not yet enter the graph -> do nothing.
Mousetrap("nothing to do");
V Line(x);
// at this point you can highlight all the values near xx
For( irow = 1, irow <= N Rows( dt ), irow += 1,
If( Abs( dt:height[irow] - x ) < 0.5, // big class height step is 1, <.5 selects a single column of weights
Marker( Marker State( 4 ), {dt:height[irow], dt:weight[irow]} )
)
);
xwidth = X Range();
xmidpoint = X Origin() + xwidth / 2;
If( x < xmidpoint,
Text( {x + xwidth / 100, y}, "height " || Char( Round( x ) ) || "\!nmore" )//
,
Text(
right justified,
{x - xwidth / 100, y},
"height " || Char( Round( x ) ) || "\!nmore"
)
);
)
//
);
Re : Les graphiques JMP peuvent-ils avoir cet effet ?
Re : Les graphiques JMP peuvent-ils avoir cet effet ?
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
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 ) ) )
);
fb = Report( gb )[FrameBox( 1 )];
xx = yy = 0;
fb << addgraphicsscript(//
Mousetrap(
xx = x;
yy = y;
);
V Line( xx );
// at this point you can highlight all the values near xx
For( irow = 1, irow <= N Rows( dt ), irow += 1,
If( Abs( dt:height[irow] - xx ) < 0.5, // big class height step is 1, <.5 selects a single column of weights
Marker( Marker State( 4 ), {dt:height[irow], dt:weight[irow]} )
)
);
xwidth = X Range();
xmidpoint = X Origin() + xwidth / 2;
If( xx < xmidpoint,
Text( {xx + xwidth / 100, yy}, "height " || Char( Round( xx ) ) || "\!nmore" )//
,
Text( right justified, {xx - xwidth / 100, yy}, "height " || Char( Round( xx ) ) || "\!nmore" )
);
//
);
edit : la ligne 18 indique désormais xx au lieu de x. Il doit y avoir quelque chose qui reste dans mon espace de noms. Merci @lala @hogi
Re : Les graphiques JMP peuvent-ils avoir cet effet ?via ( sans JSL ) Graph Builder : pas encore. Peut-être dans une future version ?
De plus en plus de programmes concurrents fournissent ce type d'annotations, je suppose donc qu'il sera également implémenté dans JMP.
Vous pouvez accéder au nouveau type de réticule pour les graphiques de type ligne et plus lisse et soutenir le souhait de @shampton82 .
Re : Les graphiques JMP peuvent-ils avoir cet effet ?via JSL, oui.
Re : Les graphiques JMP peuvent-ils avoir cet effet ?J'ai légèrement modifié le script pour afficher les valeurs de poids au lieu de plus :
names default to here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
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 ) ) )
);
fb = Report( gb )[FrameBox( 1 )];
xx = yy = 0;
valuesMatrix = :height << Get Values; //***new*** Get column values for height
fb << addgraphicsscript(//
Mousetrap(
xx = x;
yy = y;
);
V Line( xx );
// at this point you can highlight all the values near xx
For( irow = 1, irow <= N Rows( dt ), irow += 1,
If( Abs( dt:height[irow] - xx ) < 0.5, // big class height step is 1, <.5 selects a single column of weights
Marker( Marker State( 4 ), {dt:height[irow], dt:weight[irow]} )
)
);
valuesRows = char(:weight[loc(valuesMatrix,round(xx))]); //***new*** write to char weight values for all rows of height at position round(xx)
xwidth = X Range();
xmidpoint = X Origin() + xwidth / 2;
If( xx < xmidpoint,
Text( {xx + xwidth / 100, yy}, "height " || Char( Round( xx ) ) || "\!nweight " || valuesRows )////***new*** exchanged "more" with weigth and list of weight values for that location of height
,
Text( right justified, {xx - xwidth / 100, yy}, "height " || Char( Round( xx ) ) || "\!nweight " || valuesRows )
);
//
);
vous pourriez même ajouter le tri des valeurs par ordre croissant/décroissant.
Re: Les graphismes JMP peuvent-ils avoir cet effet ?Hum, je crois que beaucoup de mes conclusions étaient erronées.
Une autre tentative :

- Peut-être le
ne signifie pas « après avoir exécuté le script [glisser] » mais plutôt « avec la souris relâchée ».
- Et c'est très important. Si une mise à jour de Cadre n'est pas nécessaire, elle n'est pas mise à jour.
Donc,
- Lorsque la souris est déplacée, de nouvelles coordonnées sont enregistrées dans les axes x et y.
(
? Non - dans l'espace de noms Here car nous avons utilisé Names par défaut sur HERE (1) )
- …et les valeurs peuvent être utilisées dans l’espace de noms Here, même en dehors de la fonction Mousetrap() . Cela a intrigué @Craige_Hales , et je me suis encore plus enfoncé dans ce piège : Création d’un script de glisser-déposer
- Après la mise à jour des variables, JMP reçoit un signal pour redessiner THE Cadre avec le script graphique et les valeurs x et y actuelles .
- Les autres Framebox ne sont pas mises à jour :
Si l'on déplace la souris dans le cadre de gauche, celui du centre ne se met pas à jour – et inversement.
Cela crée l'illusion de deux espaces de noms distincts. Il n'est donc pas surprenant que les utilisateurs ne puissent pas accéder à l'espace de noms d'une Framebox : il n'y en a pas. Il s'agit simplement de l'espace de noms partagé « Ici » , combiné aux mises à jour locales de la Framebox.
- Après avoir relâché le bouton de la souris, x et y
.
Cependant, aucune mise à jour des cadres n'est déclenchée. Par conséquent, l'utilisateur ne remarque pas cette réinitialisation des variables dans l'espace de noms Ici .
- Au moment même où le graphique est mis à jour (par exemple, redimensionné ou après la sélection de certains points de données), le script graphique est exécuté à nouveau et révèle que les valeurs ont été réinitialisées (il y a quelque temps).
Re: Les graphismes JMP peuvent-ils avoir cet effet ?gpt-5.6-luna.
Rappelez-moi ce message

pas mal!
Re: Les graphismes JMP peuvent-ils avoir cet effet ?C'est vraiment génial, @Craige_Hales , @martindemel et @hogi .
C'est une fonctionnalité très pratique, et je suis tout à fait favorable à son intégration native dans Graph Builder. J'apprécie particulièrement la mise en évidence des points de données proches de l'endroit où l'on a cliqué sur le graphique.
Existe-t-il un moyen de désactiver cette fonction ? Une fois le graphique cliqué, la ligne verticale reste affichée. Il serait pratique de pouvoir réinitialiser le graphique une fois l'analyse terminée. Cette fonctionnalité serait probablement plus facile à implémenter nativement sur la plateforme qu'avec JSL.
Merci!,
DS
Re: Les graphismes JMP peuvent-ils avoir cet effet ?@SDF1 Merci ! Vous pouvez utiliser un deuxième argument de script pour que Mousetrap détecte le relâchement du bouton et supprime le script graphique. Le premier script est exécuté lors de l'appui sur la souris et à chaque mouvement suivant. Si le deuxième script est fourni, il est exécuté avec les mêmes paramètres pour indiquer le relâchement du bouton.
Re: Les graphismes JMP peuvent-ils avoir cet effet ?Je n'aurais jamais imaginé que Gemini 3.1 Pro puisse parachever ce chef-d'œuvre. 
Re: Les graphismes JMP peuvent-ils avoir cet effet ?Claude Fable 5 