Dans un précédent poste , vous avez découvert les préréglages de graphlet et la commande Coller le graphlet. Nous vous avons montré comment ils prennent en charge les vignettes de visualisation contextuelles et cliquables dans les étiquettes de survol. Ces commandes implémentent l'aspect "porcelaine" de la fonctionnalité d'extensions d'étiquettes de survol JMP 15, offrant une interface conviviale qui ne nécessite aucune compétence en matière de codage.
Dans cet article, vous aurez un meilleur aperçu de la couche de "plomberie" sous-jacente qui alimente la couche de porcelaine. Cette couche est conçue comme un cadre auquel l'utilisateur peut également accéder directement, permettant la mise en œuvre d'exigences non couvertes par les caractéristiques de la porcelaine.
Le cadre des extensions d'étiquette de survol
Un cadre est une combinaison de services de base et de points d'extension. Du point de vue du framework, les presets et les graphlets personnalisés sont identiques, donc la seule différence est que JMP fournit les définitions prédéfinies pour la commodité des utilisateurs.
Au niveau du framework, tous les graphlets – y compris les préréglages – utilisent le Définir le graphlet commande, mais chaque préréglage initialise le framework avec un ensemble d'arguments différent. Ces arguments incluent des fragments de script JSL, utilisés ultérieurement comme rappels. Le framework évalue ces rappels en réponse aux interactions de l'utilisateur, telles que le survol d'un élément visuel ou le clic sur une vignette d'étiquette de survol.
L'évaluation du rappel se produit à l'intérieur d'un Survoler le contexte d'exécution de l'étiquette (HLEC), qui capture des informations contextuelles sur l'élément visuel sous-jacent. Les rappels peuvent tirer parti de ces informations contextuelles pour implémenter un comportement dynamique. Prenez, par exemple, le préréglage Histogramme. Après avoir examiné le contexte pour trouver l'attribution de rôle Y de visualisation de base, il réutilise ensuite cette colonne pour sa propre attribution de rôle Y.
D'autres points d'entrée au framework d'extensions d'étiquettes de survol incluent Coller le graphlet (un wrapper pour Set Graphlet), Définir le textlet , et Définir la grille . Dans cet article, nous utiliserons la commande Set Graphlet comme exemple, mais les mêmes principes s'appliquent également aux autres.
La meilleure façon de créer des graphlets personnalisés est d'utiliser le Éditeur d'étiquettes de survol dialogue. Vous pouvez également utiliser l'éditeur d'étiquettes de survol pour inspecter la façon dont un préréglage de graphlet est défini. Les définitions prédéfinies fournissent d'excellents exemples d'utilisation des fonctionnalités du framework.

Rappels de graphlets
Le panneau Hover Label Editor Graphlet expose quelques arguments de script, les plus importants étant Picture et Click. Le framework les appellera lors de l'exécution en réponse aux événements suivants :
- Planant : Lorsque l'utilisateur positionne le pointeur de la souris sur un élément visuel pendant une courte période, comme lorsque l'utilisateur arrête la souris sur une barre dans un graphique à barres, le fragment de script Image est exécuté. Cela entraîne la production soit d'un PictureBox (un boîte d'affichage qui contient un objet image graphique) ou un arbre d'affichage qui contient un PictureBox. Si le script demande l'exécution d'une Plateforme, celle-ci sera lancée à l'intérieur d'une fenêtre invisible. Le framework va alors parcourir l'arborescence d'affichage du résultat puis capturer et réduire une capture d'écran du premier PictureBox rencontré. Cette image devient la vignette affichée à l'intérieur de l'étiquette de survol.
- En cliquant: Lorsque l'utilisateur clique avec le bouton gauche sur la vignette du graphlet d'étiquette de survol, l'argument facultatif Click est déclenché. S'il n'est pas présent, le script Picture est réutilisé, mais l'exécution d'une plate-forme contenue entraîne l'affichage d'une fenêtre visible. C'est ainsi que les préréglages lancent leurs visualisations.
Le rappel Click peut exécuter des scripts JSL arbitraires. Par exemple, il peut ouvrir des pages Web, effectuer des appels REST, charger des fichiers à partir du disque et mettre à jour des tables. Il permet l'intégration avec des données externes, des systèmes et d'autres scénarios avancés.
Comme mentionné précédemment, l'évaluation des rappels se produit dans des contextes d'exécution, qui ont deux composants :
- Un filtre de données local qui sous-ensemble les lignes pour correspondre aux données de l'élément visuel.
- Un espace de noms local qui capture les attributs des éléments visuels.
Filtre de données locales
Chaque élément visuel d'un graphique correspond à un sous-ensemble des données d'origine. Par exemple, regardons un graphique à barres montrant la taille moyenne des élèves selon le sexe. La première barre correspond aux étudiantes ; le second est pour les mâles. Ce regroupement implicite se produit lors de la définition d'une visualisation.
Le cadre rend le regroupement explicite grâce à un équivalent Filtre de données locales (LDF), qui est utilisé pour restreindre les lignes de la table de données visibles lors de l'exécution du rappel. La définition du LDF est basée sur :
- Le type de graphique de visualisation de base.
- Les colonnes affectées à ses rôles de regroupement (X, Groupe X/Y, Superposition, etc.).
- Les valeurs associées à ces colonnes.
Dans l'exemple ci-dessous, le graphique de référence est un petit graphique à barres multiples. Le cadre le mappe à un LDF en fonction de ses deux variables de regroupement :
- Celui affecté au rôle X (âge).
- Celui affecté au groupe Y (sexe).
Notez comment la barre survolée et le panneau qui contient le graphique génèrent les valeurs de filtre.

Un contrôle supplémentaire sur l'inclusion de colonnes est possible grâce à la Ignorer les filtres les attributs. Bien que cela soit rarement nécessaire, cela peut être utile si vous souhaitez afficher plus de données que celles généralement associées à l'élément visuel sous-jacent.
Le mécanisme de base derrière explorations est la possibilité de lancer des plates-formes avec des LDF contextuels en réponse aux interactions des utilisateurs.
Espace de noms local
Le deuxième élément du HLEC est un espace de noms local . Son objectif principal est d'exposer des informations de contexte au graphlet, ce qui permet au graphlet d'afficher un comportement dynamique et sensible au contexte. Le framework encapsule chaque rappel de graphlet dans un espace de noms local avant de l'exécuter.
L'espace de noms local du graphlet est rempli par le framework avec des variables locales. Ces variable de contexte suivent une convention de dénomination, ce qui signifie que leurs noms doivent toujours commencer par un trait de soulignement. Ils capturent des informations provenant de différentes sources associées au contexte d'exécution actuel :
- Type d'élément visuel survolé (barre, marqueur, etc.).
- Index de la première ligne des données associées.
- Nombre d'observations dans les données associées.
- Survolez les entrées de la grille d'étiquettes (une variable pour chaque entrée).
- Type de rappel (Image, Clic, etc.).
- LDF clause where.
- Les niveaux d'exploration comptent.
Un moyen simple de vérifier les valeurs d'un nouveau graphlet lors de son débogage consiste à utiliser le préréglage de contexte Textlet, qui ajoute les valeurs sous forme de texte à l'étiquette de survol elle-même, comme indiqué ci-dessous :

Mettre tous ensemble
Le schéma suivant montre comment les différentes parties du framework se rejoignent dans l'exécution d'un preset de graphlet. Dans un graphlet personnalisé, l'utilisateur fournit le modèle de graphique à l'aide de l'argument de script Picture.

Tout d'abord, le framework capture un modèle de graphique et d'autres arguments au moment de la configuration. Plus tard, en réponse aux interactions de l'utilisateur, il crée le filtre et l'espace de noms qui font partie du HLEC. Il instancie le modèle à l'intérieur du HLEC pour générer l'image miniature de l'étiquette de survol. Si l'utilisateur clique sur cette image, il lance la plateforme associée sur sa propre fenêtre.
Un exemple de graphlet personnalisé
Maintenant que vous comprenez les mécanismes, voici un exemple de la façon dont l'accès au framework graphlet sous-jacent a aidé un utilisateur à résoudre un problème réel.
Il n'y a pas si longtemps, un utilisateur a posé une question ici dans le Communauté d'utilisateurs JMP . Elle avait un dossier avec des fichiers d'images (en particulier, des images haute résolution) de ses expériences. Elle souhaitait afficher l'image associée à une expérience dans l'étiquette de survol, mais les images étaient trop volumineuses pour être stockées dans ses tables JMP. Était-il possible de les charger à partir du disque à la demande ?
Il y avait quelques obstacles pour que cela se produise. Il ne correspondait à aucun des préréglages existants, il ne convenait pas à Paste Graphlet car il nécessitait un comportement dynamique et le nom de fichier de l'image affichée devait être calculé à la demande.
La solution consistait à créer un graphlet personnalisé en étendant le framework avec des rappels basés sur des primitives de fichiers JSL.
Les principes de cette solution sont présentés ci-dessous dans un exemple basé sur le jeu de données Iris. La partie critique de cet exemple montre comment l'image peut être chargée directement à partir du disque. Le nom de fichier est basé sur l'une des variables d'espace de noms local HLEC. En prime, vous pouvez voir comment ouvrir une page Web connexe en réponse à l'utilisateur qui clique sur l'image affichée.
Set Graphlet(
// Value from hover label grid entry (labeled column)
Picture(
Picture Box( Open( img_dir || local:_Species || ".jpg", "jpg" ) )
),
// Value from data table using column reference for visualized row
Click(
Web( "https://en.wikipedia.org/wiki/Iris_" || Column( "Species" )[local:_firstRow] )
)
)

Conclusion
Bien que nous espérons que vous serez toujours en mesure d'utiliser des préréglages et de coller des graphlets pour implémenter la majorité de vos besoins, nous réalisons que ce n'est pas toujours possible. En utilisant le framework, vous pouvez créer vos propres extensions d'étiquettes de survol personnalisées chaque fois que vous avez un besoin particulier.
Si vous avez des questions, souhaitez partager vos créations ou simplement voir ce que les autres utilisateurs proposent, veuillez nous rejoindre ici dans le Communauté d'utilisateurs JMP . Nous avons hâte de voir votre prochain graphlet sympa !