Ich habe einen Anwendungsfall, um ein Diagramm zu erstellen, das eine Drilldown-Funktion haben wird.
Der Benutzer klickt auf einen Punkt im Diagramm und unter Verwendung der Mousetrap()-Funktion wird ein Skript ausgeführt, das ein neues Fenster öffnet, das ein weiteres Diagramm mit einigen detaillierteren Drilldown-Informationen enthält.
Ich möchte dann eine zusätzliche Drilldown-Ebene von diesem ersten Popup-Fenster aus unterstützen.
Ich werde dies anhand eines einfachen Beispiels mit dem BigClass-Datensatz im angehängten Skript veranschaulichen.
Die Hinweise im Skript verdeutlichen das Problem: Mit nur einem Funktionsaufruf mouse-trap() funktioniert der erste Drilldown.
Aber wenn ich eine zweite Mausefalle hinzufüge und sie speziell dem Diagramm hinzufüge, das sich aus dem ersten Drilldown ergibt, passiert stattdessen, dass die zweite Drilldown-Aktion auf den ersten Mausklick angewendet wird, was nicht erwartet wurde .
Nicht sicher, ob es möglich ist, MouseTrap() so zu verwenden oder nicht?
d
@Mark_Bailey danke für den Hinweis auf Graphlets!
@tsl Sie möchten also einen Drilldown über mehrere Ebenen durchführen. Sehr schön, dies ist eine großartige Möglichkeit, mehr über Ihre Daten zu erfahren, indem Sie die Datenvisualisierung selbst verwenden, um Ihren Fokus einzugrenzen.
Lassen Sie uns die Möglichkeiten aufzählen, wie Sie dies in JMP15 mithilfe von Graphlets tun können. Diese neue Funktion folgt einer „Porcelain + Plumbing“-Architektur, was bedeutet, dass es vordefinierte, benutzerfreundliche Möglichkeiten gibt, Standardverhalten zu erreichen, die auf einer Programmier-API (JSL) aufbauen, auf die Sie auch zugreifen können, um benutzerdefinierte Fälle zu implementieren. Das von Ihnen beschriebene Szenario kann mit zwei verschiedenen „Porzellan“- oder Point-and-Click-Ansätzen implementiert werden.
Wenn Ihr Fokus auf einer bestimmten, einzelnen Messung liegt – sagen wir Höhe – können Sie eine Graphlet-Voreinstellung wie Histogramm verwenden. Nachdem Sie Ihr Basisliniendiagramm erstellt haben, klicken Sie mit der rechten Maustaste auf den Diagrammhintergrund, um auf das neue Menü „Hover-Beschriftung“ zuzugreifen. Von dort aus sehen Sie die voreingestellten Optionen

Eine Graphlet-Voreinstellung erstellt ein Graphlet des angegebenen Visualisierungstyps und leitet die Rollenzuordnung von den im Basisdiagramm ausgewählten Variablen ab. Da das Basisliniendiagramm die Anzahl der Höhenvariablen anzeigt, zeigt das voreingestellte Histogrammgraphlet automatisch die Verteilung dieser Variablen für jeden angegebenen Balken.Aber jeder Balken filtert bereits auf einen einzelnen Höhenwert herunter, also ist es keine interessante Verteilung. Nehmen wir an, unsere Basislinie war stattdessen ein Histogramm; Eine Histogramm-Voreinstellung würde die Verteilung der Werte in jedem Bin zeigen:

Beachten Sie, wie sich das Hover-Label-Miniaturbild wie eine Diagrammvorschau verhält. Wenn Sie fortfahren und auf das Miniaturbild klicken, wird das entsprechende Diagramm in einem neuen Fenster gestartet. Dieses neue Diagramm wird nach unten gefiltert, um nur die Zeilen einzuschließen, die dem visuellen Element entsprechen, über dem der Mauszeiger bewegt wurde (in diesem Fall die 60-62-Bin), wodurch der Drilldown-Vorgang implementiert wird. Der Filtervorgang wird mithilfe eines reduzierten lokalen Datenfilters implementiert, wodurch er widerstandsfähig gegenüber nicht verwandten Auswahländerungen wird und eine weitere Untersuchung durch Änderungen in den Filtereinstellungen ermöglicht.

Ein weiteres Merkmal von Graphlet-Voreinstellungen besteht darin, dass sie rekursiv vorkonfiguriert sind, um erweiterte Drilldown-Szenarien zu unterstützen. Sie können also fortfahren und mit den Bins im neuen Histogramm interagieren. Sie werden sehen, dass Sie sie auch aufschlüsseln können:

Das an die Seite angehängte .jsl-Beispiel hatte nun ein komplexeres Drilldown-Szenario, bei dem Visualisierungstypen und Rollenzuweisungen auf jeder Drilldown-Ebene bestimmten Werten zugeordnet wurden:
* Level 0 (Grundlinie): Der Höhenwert zählt
* Ebene 1: Boxplot des Gewichts nach Geschlecht
* Ebene 2: Zeilendetails werden im Protokoll angezeigt
Diese Anpassungsstufe kann immer noch mit einer anderen Art von „Porzellan“ erreicht werden: dem Befehl „Graphlet einfügen“. Dieser Befehl ermöglicht es dem Benutzer, Graphlet-Definitionen zu "stapeln", die verwendet werden, wenn der Benutzer auf jeder Ebene einen Drilldown zu visuellen Elementen durchführt.
Fahren Sie also nach dem Erstellen des Basisdiagramms fort und erstellen Sie Diagramme, die jede der gewünschten Drilldown-Ebenen darstellen. Machen Sie sich keine Gedanken über das Filtern – wie im vorherigen Fall wird das automatisch für Sie erledigt. Dann - beginnend mit der letzte level - kopiert sein Skript in die Zwischenablage:

Gehen Sie dann zum vorherigen Diagramm und fügen Sie dann (das Skript als) graphlet ein:

In den obigen Bildern haben wir das Drilldown-Diagramm der Ebene 1 (das Diagramm „Gewicht nach Geschlecht“) in das Basisdiagramm eingefügt. Das Ergebnis:

Als dieses Szenario definiert wurde, war kein Paste-Graphlet der Ebene 2 erforderlich. Das Anzeigen der Zeilenwerte für das schwebende visuelle Element ist bereits das Standardverhalten für Hover-Beschriftungen. Folgendes würden wir bei einem Drilldown auf der zweiten Ebene sehen, nachdem wir den Mauszeiger über den zweiten Boxplot bewegt haben:

Durch Klicken mit der rechten Maustaste auf das Schwebeetikett kann der Benutzer seinen Inhalt kopieren, die Daten unterteilen oder die Konfiguration des Schwebeetiketts weiter ändern.
Ich hoffe, das war hilfreich. Ein kategorisches Drilldown-Beispiel finden Sie in der Antwort auf https://community.jmp.com/t5/Discussions/drill-down-in-a-graph-hierarchy/mp/11702
Weitere Informationen zu Hover-Label-Anpassungen finden Sie unter: https://www.jmp.com/support/help/en/15.0/index.shtml#page/jmp/add-hover-graphs.shtml#
Informationen zu Graphlets speziell finden Sie unter: https://www.jmp.com/support/help/en/15.0/index.shtml#page/jmp/add-graphs-or-images-to-hover-labels.s...
Tolle Idee! Verschieben Sie Ihren Code in eine Funktion und es funktioniert:
makesubset = Function( {_x},
{TestWin}, // local variables
dt << select where( :height == _x );
TestWin = New Window( "Drill Down Window",
dt << GraphBuilder( Size( 534, 448 ), Show Control Panel( 0 ),
Where( Selected() ), Variables( X( :sex ), Y( :weight ) ),
Elements( Points( X, Y, Legend( 4 ) ), Box Plot( X, Y, Legend( 5 ) ) )
)
);
TestWin[FrameBox( 1 )] << add graphics script(
Mousetrap(
_x2 = Round( X, 0 );
Show( _x2 );
)
);
);
dt = Open( "$sample_data/big class.jmp" );
dt << Graph Builder( Size( 527, 454 ), Show Control Panel( 0 ),
Variables( X( :height ) ), Elements( Bar( X, Legend( 6 ) ) ),
SendToReport( Dispatch( {}, "Graph Builder", FrameBox,
{Add Graphics Script( 2, Description( "Script" ),
Mousetrap(
_x = Round( X, 0 );
makesubset( _x );
)
), Grid Line Order( 1 ), Reference Line Order( 3 )}
)
)
);Es verhält sich so, wie Sie es beschreiben, da die Mousetrap-Funktion nicht wirklich wie andere Funktionen ausgeführt wird. Die Methode <
Ich vermute, es behält das letzte. Das Scannen folgt nicht dem Funktionsaufruf, und der Funktionsaufruf kann Ihre JSL leichter lesbar und wartungsfreundlicher machen.
@EvanMcCorkle Ja, es scheint seltsam, dass es eine Mausefalle in einer Mausefalle findet.
JMP 15 hat genau zu diesem Zweck „Hover-Labels“ eingeführt. Es gibt drei Aspekte, die zusammenarbeiten: Graphlets, Textlets und Gridlets.
Siehe Hilfe > JMP-Dokumentationsbibliothek > Handbuch zur Skripterstellung > Kapitel 9: JMP-Berichte, Seite 512. Es gibt viele Erklärungen und Beispiele, um zu lernen, wie man Drilldown-Verhalten implementiert.