Obtenir les lignes actuellement affichées sur un dendrogrammeBonjour,
J'aimerais savoir s'il existe un moyen de savoir quels individus sont actuellement affichés sur un dendrogramme après une action de zoom.
Voici un exemple:
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 )}
)
)
);J'aimerais obtenir la liste des 13 pays sélectionnés.
Une bonne solution, je pense, serait d'obtenir les valeurs min et max (18 et 31) mais jusqu'à présent je ne trouve pas comment les extraire...
Merci d'avance pour votre aide!
Re : Obtenir les lignes actuellement affichées sur un dendrogrammeSalut @txnelson ,
Je n'ai jamais utilisé cette fonctionnalité mais elle élargit vraiment les possibilités de JMP, c'est tellement chouette !!
Dans ma situation, je n'ai pas vraiment besoin de sélectionner les lignes mais juste d'obtenir les valeurs minOrder et maxOrder. C'est pourquoi je pense qu'il n'y aura pas de problème d'interférence comme mentionné par @julien . Faut que je teste ça 
Merci encore à vous deux pour votre aide !
Re : Obtenir les lignes actuellement affichées sur un dendrogrammeAh, on y va. Fallait penser à celui-là !
//Modifier : l'ajout de ce script graphique semble interférer avec le double-clic pour zoomer sur le cluster sélectionné. Il y a certainement un moyen de le faire fonctionner, mais le bouton semble assez infaillible pour le moment, surtout si vous voulez pouvoir sélectionner des individus dans le dendrogramme mais ensuite rétablir la sélection au zoom actuel.
Re : Obtenir les lignes actuellement affichées sur un dendrogrammeVous pouvez joindre un script graphique
obj << ajouter un script graphique()
à la framebox du dendographe.Il se déclenchera à chaque fois que quelque chose est fait sur le graphique.Dans le script ajouté, vous pouvez vérifier si le minOrder ou le MaxOrder ont changé.
Re : Obtenir les lignes actuellement affichées sur un dendrogrammeSalut @anne_sa ,
C'est une excellente idée, mais je n'ai pas trouvé de moyen facile d'y parvenir. Que diriez-vous d'un bouton en bas de la fenêtre pour invoquer la sélection ?
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>
@julien
Re : Obtenir les lignes actuellement affichées sur un dendrogrammeSalut @julien ,
Merci beaucoup pour cette réponse rapide c'est exactement ce que je cherchais !!!
J'ai juste une petite question complémentaire : y a-t-il un moyen de détecter qu'un zoom a été fait sur le dendrogramme ? Peut-être quelque chose basé sur la fonctionnalité <Re : Obtenir les lignes actuellement affichées sur un dendrogrammeTrès bien fait.
Re : Obtenir les lignes actuellement affichées sur un dendrogramme
Salut @anne_sa ,
Je ne connais pas de moyen direct d'obtenir ces lignes, mais puisque les informations Min et Max font partie du script de la plate-forme, et parce que nous pouvons enregistrer l'ordre d'affichage des lignes dans le dendrogramme, nous pouvons écrire notre chemin au résultat avec un peu de travail. Ce n'est pas tout à fait élégant, mais voici une façon que j'ai trouvée:
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;
J'espère que ça aide!
@julien