Abrufen von Zeilen, die derzeit in einem Dendrogramm angezeigt werdenHallo,
Ich würde gerne wissen, ob es eine Möglichkeit gibt, zu wissen, welche Personen nach einer Zoom-Aktion derzeit auf einem Dendrogramm angezeigt werden.
Hier ist ein Beispiel:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Birth Death Subset.jmp" );
Hierarchical Cluster(
Y( :birth, :death ),
Label( :country ),
Method( "Ward" ),
Standardize Data( 1 ),
Dendrogram Scale( "Distance Scale" ),
Number of Clusters( 4 ),
SendToReport(
Dispatch( {}, "Dendrogram", OutlineBox, {SetHorizontal( 1 )} ),
Dispatch(
{"Dendrogram"},
"2",
ScaleBox,
{Min( 18 ), Max( 31 ), Inc( 5 ), Minor Ticks( 0 )}
)
)
);Ich möchte die Liste der 13 ausgewählten Länder erhalten.
Ich denke, eine gute Lösung wäre, die Min- und Max-Werte (18 und 31) zu erhalten, aber bisher kann ich nicht finden, wie ich sie extrahieren kann ...
Vielen Dank im Voraus für Ihre Hilfe!
Betreff: Zeilen abrufen, die derzeit auf einem Dendrogramm angezeigt werdenHi @txnelson ,
Ich habe diese Funktion noch nie benutzt, aber sie erweitert die Möglichkeiten von JMP wirklich, das ist so schön!!
In meiner Situation muss ich die Zeilen nicht wirklich auswählen, sondern nur die Werte minOrder und maxOrder abrufen. Deshalb denke ich, dass es kein Interferenzproblem geben wird, wie von erwähnt @julianisch . das muss ich testen 
Nochmals vielen Dank an Sie beide für Ihre Hilfe!
Betreff: Zeilen abrufen, die derzeit auf einem Dendrogramm angezeigt werdenAh, da gehen wir. Daran hätte man denken sollen!
//Bearbeiten: Das Hinzufügen dieses Grafikskripts scheint den Doppelklick zu stören, um auf den ausgewählten Cluster zu zoomen. Es gibt sicherlich eine Möglichkeit, dies zum Laufen zu bringen, aber die Schaltfläche scheint im Moment ziemlich narrensicher zu sein, insbesondere wenn Sie in der Lage sein möchten, Personen im Dendrogramm auszuwählen, aber dann die Auswahl auf den aktuellen Zoom zurückzusetzen.
Betreff: Zeilen abrufen, die derzeit auf einem Dendrogramm angezeigt werdenSie können ein Grafikskript anhängen
obj << Grafikskript hinzufügen()
zur Dendographen-Rahmenbox.Es wird immer dann ausgelöst, wenn etwas mit dem Graphen gemacht wird.Im hinzugefügten Skript können Sie überprüfen, ob sich minOrder oder MaxOrder geändert haben.
Betreff: Zeilen abrufen, die derzeit auf einem Dendrogramm angezeigt werdenHi @anne_sa ,
Das ist eine großartige Idee, aber ich habe keinen einfachen Weg gefunden, dies zu verwirklichen. Wie wäre es mit einer Schaltfläche am unteren Rand des Fensters, um die Auswahl aufzurufen?
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Birth Death Subset.jmp" );
hcPlatform = Hierarchical Cluster(
Y( :birth, :death ),
Label( :country ),
Method( "Ward" ),
Standardize Data( 1 ),
Dendrogram Scale( "Distance Scale" ),
Number of Clusters( 4 ),
SendToReport(
Dispatch( {}, "Dendrogram", OutlineBox, {SetHorizontal( 1 )} ),
Dispatch( {"Dendrogram"}, "2", ScaleBox, {Min( 18 ), Max( 31 ), Inc( 5 ), Minor Ticks( 0 )} )
)
);
//save the order displayed in the platform
displayOrd = hcPlatform << Save Display Order;
selectZoom = expr(
//get the script, which contains the Min() and Max() information
exprPlat = hcPlatform << Get Script;
//Extract the Min and Max. This is indexed in the reverse of the Display Order
//that is, the max value is the first in the order (as if it is an axis), so subtracting
//this value from the number of rows in the table brings things into alignment
minOrder = 1 + N Rows( dt ) - Arg( Extract Expr( exprPlat, Max( Wild() ) ) );
maxOrder = N Rows( dt ) - Arg( Extract Expr( exprPlat, Min( Wild() ) ) );
//select the rows in the table that meet the condition of being in the randge displayed
dt << Select Where( And( As Column( displayOrd ) >= minOrder, As Column( displayOrd ) <= maxOrder ) );
//get the matrix of row numbers for the selected rows, i.e., rows displayed in zoom
matchingRows = dt << get selected rows;
);
//add the button to the report
report(hcPlatform)<<APPEND></APPEND>
@julianisch
Betreff: Zeilen abrufen, die derzeit auf einem Dendrogramm angezeigt werdenHi @julianisch ,
Vielen Dank für diese schnelle Antwort, genau das habe ich gesucht!!!
Ich habe nur eine kleine zusätzliche Frage: Gibt es eine Möglichkeit zu erkennen, dass eine Zoom-Aktion auf dem Dendrogramm durchgeführt wurde? Vielleicht etwas, das auf der Funktion <Betreff: Zeilen abrufen, die derzeit auf einem Dendrogramm angezeigt werdenSehr schön gemacht.
Betreff: Zeilen abrufen, die derzeit auf einem Dendrogramm angezeigt werden
Hi @anne_sa ,
Ich kenne keinen direkten Weg, um diese Zeilen zu erhalten, aber da die Min- und Max-Informationen Teil des Skripts für die Plattform sind und wir die Anzeigereihenfolge der Zeilen im Dendrogramm speichern können, können wir unseren Weg skripten mit ein wenig Arbeit zum Ergebnis. Es ist nicht ganz elegant, aber hier ist eine Möglichkeit, die mir eingefallen ist:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Birth Death Subset.jmp" );
hcPlatform = Hierarchical Cluster(
Y( :birth, :death ),
Label( :country ),
Method( "Ward" ),
Standardize Data( 1 ),
Dendrogram Scale( "Distance Scale" ),
Number of Clusters( 4 ),
SendToReport(
Dispatch( {}, "Dendrogram", OutlineBox, {SetHorizontal( 1 )} ),
Dispatch( {"Dendrogram"}, "2", ScaleBox, {Min( 18 ), Max( 31 ), Inc( 5 ), Minor Ticks( 0 )} )
)
);
//save the order displayed in the platform
displayOrd = hcPlatform << Save Display Order;
//get the script, which contains the Min() and Max() information
exprPlat = hcPlatform << Get Script;
//Extract the Min and Max. This is indexed in the reverse of the Display Order
//that is, the max value is the first in the order (as if it is an axis), so subtracting
//this value from the number of rows in the table brings things into alignment
minOrder = 1 + N Rows( dt ) - Arg( Extract Expr( exprPlat, Max( Wild() ) ) );
maxOrder = N Rows( dt ) - Arg( Extract Expr( exprPlat, Min( Wild() ) ) );
//select the rows in the table that meet the condition of being in the randge displayed
dt << Select Where( And( As Column( displayOrd ) >= minOrder, As Column( displayOrd ) <= maxOrder ) );
//get the matrix of row numbers for the selected rows, i.e., rows displayed in zoom
matchingRows = dt << get selected rows;
Ich hoffe das hilft!
@julianisch