In einem früheren Post haben Sie etwas über Graphlet-Voreinstellungen und den Befehl „Graphlet einfügen“ gelernt. Wir haben Ihnen gezeigt, wie sie kontextbezogene, anklickbare Miniaturansichten der Visualisierung in Hover-Labels unterstützen. Diese Befehle implementieren den „Porzellan“-Aspekt der Hover-Label-Erweiterungsfunktion von JMP 15 und bieten eine benutzerfreundliche Oberfläche, die keine Programmierkenntnisse erfordert.
In diesem Beitrag erhalten Sie einen besseren Einblick in die darunter liegende „Sanitärschicht“, die die Porzellanschicht mit Strom versorgt. Diese Ebene ist als Framework konzipiert, auf das der Benutzer auch direkt zugreifen kann und das die Umsetzung von Anforderungen ermöglicht, die nicht durch die Porzellanfunktionen abgedeckt werden.
Das Hover-Label-Erweiterungs-Framework
Ein Framework ist eine Kombination aus Basisdiensten und Erweiterungspunkten. Aus Sicht des Frameworks sind Voreinstellungen und benutzerdefinierte Graphlets identisch, der einzige Unterschied besteht darin JMP stellt den Benutzern die voreingestellten Definitionen zur Verfügung.
Auf Framework-Ebene verwenden alle Graphlets – einschließlich Voreinstellungen – das Graphlet festlegen Befehl, aber jede Voreinstellung initialisiert das Framework mit einem anderen Satz von Argumenten. Zu diesen Argumenten gehören JSL-Skriptfragmente, die später als Rückrufe verwendet werden. Das Framework wertet diese Rückrufe als Reaktion auf Benutzerinteraktionen aus, z. B. wenn Sie mit der Maus über ein visuelles Element fahren oder auf die Miniaturansicht eines Hover-Labels klicken.
Die Rückrufauswertung erfolgt innerhalb eines Hover-Label-Ausführungskontext (HLEC), das Kontextinformationen über das zugrunde liegende visuelle Element erfasst. Rückrufe können diese Kontextinformationen nutzen, um dynamisches Verhalten zu implementieren. Nehmen Sie zum Beispiel die Voreinstellung „Histogramm“. Nachdem der Kontext untersucht wurde, um die Y-Rollenzuweisung der Basisvisualisierung zu finden, wird diese Spalte dann für die eigene Y-Rollenzuweisung wiederverwendet.
Weitere Einstiegspunkte zum Hover-Label-Erweiterungs-Framework sind: Graphlet einfügen (ein Wrapper für Set Graphlet), Textlet festlegen , Und Gridlet einstellen . In diesem Beitrag verwenden wir den Befehl „Set Graphlet“ als Beispiel, aber die gleichen Prinzipien gelten auch für die anderen.
Der beste Weg, benutzerdefinierte Graphlets zu erstellen, ist die Verwendung von Hover-Label-Editor Dialog. Sie können den Hover-Label-Editor auch verwenden, um zu überprüfen, wie eine Graphlet-Voreinstellung definiert ist. Voreingestellte Definitionen bieten hervorragende Beispiele für die Verwendung der Framework-Funktionen.

Graphlet-Rückrufe
Das Graphlet-Bedienfeld des Hover-Label-Editors stellt einige Skriptargumente zur Verfügung, die wichtigsten sind „Bild“ und „Klick“. Das Framework ruft sie zur Laufzeit als Reaktion auf die folgenden Ereignisse auf:
- Schweben: Wenn der Benutzer den Mauszeiger für kurze Zeit über einem visuellen Element positioniert, beispielsweise wenn der Benutzer die Maus über einen Balken in einem Balkendiagramm hält, wird das Bildskriptfragment ausgeführt. Dadurch wird entweder eine PictureBox (a Vitrine das ein Grafikbildobjekt enthält) oder a Anzeigebaum das eine PictureBox enthält. Wenn das Skript die Ausführung einer Plattform fordert, wird es in einem unsichtbaren Fenster gestartet. Das Framework durchläuft dann den Anzeigebaum des Ergebnisses und erfasst dann einen Screenshot der ersten angetroffenen PictureBox und verkleinert ihn. Dieses Bild wird zur Miniaturansicht, die im Hover-Label angezeigt wird.
- Klicken: Wenn der Benutzer mit der linken Maustaste auf die Miniaturansicht des Hover-Labels des Graphlets klickt, wird das optionale Click-Argument ausgelöst. Wenn es nicht vorhanden ist, wird das Picture-Skript wiederverwendet, aber die Ausführung einer enthaltenen Plattform führt zu einem sichtbaren Fenster. Auf diese Weise starten Voreinstellungen ihre Visualisierungen.
Der Click-Callback kann beliebige JSL-Skripte ausführen. Es kann beispielsweise Webseiten öffnen, REST-Aufrufe durchführen, Dateien von der Festplatte laden und Tabellen aktualisieren. Es ermöglicht die Integration mit externen Daten, Systemen und anderen erweiterten Szenarien.
Wie bereits erwähnt, erfolgt die Auswertung von Rückrufen innerhalb von Ausführungskontexten, die aus zwei Komponenten bestehen:
- Ein lokaler Datenfilter, der die Zeilen so unterteilt, dass sie mit den Daten des visuellen Elements übereinstimmen.
- Ein lokaler Namespace, der die visuellen Elementattribute erfasst.
Lokaler Datenfilter
Jedes visuelle Element in einem Diagramm entspricht einer Teilmenge der Originaldaten. Schauen wir uns zum Beispiel ein Balkendiagramm an, das die durchschnittliche Körpergröße der Schüler nach Geschlecht zeigt. Der erste Balken entspricht den Studentinnen; der zweite ist für die Männer. Diese implizite Gruppierung erfolgt während der Definition einer Visualisierung.
Das Framework macht die Gruppierung durch ein Äquivalent explizit Lokaler Datenfilter (LDF), mit dem die während der Ausführung des Rückrufs sichtbaren Datentabellenzeilen eingeschränkt werden. Die LDF-Definition basiert auf:
- Der Diagrammtyp der Basisvisualisierung.
- Die seinen Gruppierungsrollen zugewiesenen Spalten (X, Gruppe X/Y, Überlagerung usw.).
- Die diesen Spalten zugeordneten Werte.
Im folgenden Beispiel ist das Basisdiagramm ein Balkendiagramm mit kleinen Vielfachen. Das Framework ordnet es basierend auf seinen beiden Gruppierungsvariablen einem LDF zu:
- Derjenige, der der X-Rolle (Alter) zugewiesen ist.
- Derjenige, der der Gruppe Y (Geschlecht) zugeordnet ist.
Beachten Sie, wie die schwebende Leiste und das Panel, das das Diagramm enthält, die Filterwerte generieren.

Eine zusätzliche Kontrolle über die Spalteneinbeziehung ist durch möglich Filter überspringen Attribute. Obwohl dies selten notwendig ist, kann es nützlich sein, wenn Sie mehr Daten anzeigen möchten, als normalerweise mit dem zugrunde liegenden visuellen Element verbunden sind.
Der Kernmechanismus dahinter Drilldowns ist die Möglichkeit, Plattformen mit kontextbasierten LDFs als Reaktion auf Benutzerinteraktionen zu starten.
Lokaler Namensraum
Die zweite Komponente des HLEC ist a lokaler Namensraum . Sein Hauptzweck besteht darin, dem Graphlet Kontextinformationen zur Verfügung zu stellen, wodurch das Graphlet dynamisches, kontextbewusstes Verhalten zeigen kann. Das Framework verpackt jeden Graphlet-Rückruf in einen lokalen Namespace, bevor es ihn ausführt.
Der lokale Graphlet-Namespace wird vom Framework mit lokalen Variablen gefüllt. Diese Kontextvariablen folgen einer Namenskonvention, was bedeutet, dass ihre Namen immer mit einem Unterstrich beginnen müssen. Sie erfassen Informationen aus verschiedenen Quellen, die mit dem aktuellen Ausführungskontext verbunden sind:
- Typ des schwebenden visuellen Elements (Balken, Markierung usw.).
- Index der ersten Zeile der zugehörigen Daten.
- Anzahl der Beobachtungen in den zugehörigen Daten.
- Hover-Label-Rastereinträge (eine Variable für jeden Eintrag).
- Art des Rückrufs (Bild, Klick usw.).
- LDF-Where-Klausel.
- Es zählen die Drilldown-Ebenen.
Eine einfache Möglichkeit, die Werte eines neuen Graphlets beim Debuggen zu überprüfen, ist die Verwendung der Textlet-Kontextvoreinstellung, die die Werte als Text zum Hover-Label selbst hinzufügt, wie unten gezeigt:

Alles zusammenfügen
Das folgende Diagramm zeigt, wie die verschiedenen Teile des Frameworks bei der Ausführung einer Graphlet-Voreinstellung zusammenkommen. In einem benutzerdefinierten Graphlet stellt der Benutzer die Diagrammvorlage mithilfe des Skriptarguments „Picture“ bereit.

Erstens erfasst das Framework zum Zeitpunkt der Konfiguration eine Diagrammvorlage und andere Argumente. Später werden als Reaktion auf Benutzerinteraktionen der Filter und der Namespace erstellt, die Teil des HLEC sind. Es instanziiert die Vorlage im HLEC, um das Miniaturbild des Hover-Labels zu generieren. Wenn der Benutzer auf dieses Bild klickt, wird die zugehörige Plattform in einem eigenen Fenster gestartet.
Ein benutzerdefiniertes Graphlet-Beispiel
Nachdem Sie nun die Mechanismen verstanden haben, finden Sie hier ein Beispiel dafür, wie der Zugriff auf das zugrunde liegende Graphlet-Framework einem Benutzer bei der Lösung eines echten Problems geholfen hat.
Vor nicht allzu langer Zeit hat ein Benutzer hier im Internet eine Frage gestellt JMP-Benutzergemeinschaft . Sie hatte einen Ordner mit Bilddateien (insbesondere hochauflösenden Bildern) ihrer Experimente. Sie wollte das mit einem Experiment verknüpfte Bild im Hover-Label anzeigen, aber die Bilder waren zu groß, um sie in ihren JMP-Tabellen zu speichern. War es möglich, sie bei Bedarf von der Festplatte zu laden?
Es gab einige Hindernisse, die diesem Ziel im Wege standen. Es stimmte mit keiner der vorhandenen Voreinstellungen überein und passte nicht gut zu Paste Graphlet, da es dynamisches Verhalten erforderte und der Dateiname für das angezeigte Bild bei Bedarf berechnet werden musste.
Die Lösung bestand darin, ein benutzerdefiniertes Graphlet zu erstellen, indem das Framework um Rückrufe erweitert wurde, die auf JSL-Dateiprimitiven basieren.
Die Prinzipien dieser Lösung werden unten in einem Beispiel basierend auf dem Iris-Datensatz gezeigt. Der entscheidende Teil dieses Beispiels besteht darin, zu zeigen, wie das Image direkt von der Festplatte geladen werden kann. Der Dateiname basiert auf einer der lokalen HLEC-Namespace-Variablen. Als Bonus können Sie sehen, wie eine entsprechende Webseite geöffnet wird, wenn der Benutzer auf das angezeigte Bild klickt.
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] )
)
)

Abschluss
Obwohl wir hoffen, dass Sie immer in der Lage sind, Voreinstellungen zu verwenden und Graphlets einzufügen, um die meisten Ihrer Anforderungen umzusetzen, sind wir uns darüber im Klaren, dass dies nicht immer möglich ist. Mithilfe des Frameworks können Sie Ihre eigenen benutzerdefinierten Hover-Label-Erweiterungen erstellen, wann immer Sie einen besonderen Bedarf haben.
Wenn Sie Fragen haben, Ihre Kreationen teilen möchten oder einfach nur sehen möchten, was andere Benutzer sich einfallen lassen, schließen Sie sich uns bitte hier im an JMP-Benutzergemeinschaft . Wir freuen uns auf Ihr nächstes cooles Graphlet!