WINDOWS 10 > JMP 17.2 > Générateur de graphiques > Nuage de points > Annotation de cluster dynamiqueBonjour la communauté JMP,
Windows Pro 10 - JMP 17.2
J'ai des données projetées sur un UMAP 2D et je voudrais insérer automatiquement l'ID de cluster formaté (couleur et taille) au-dessus du graphique de dispersion UMAP2 x UMAP1 dans Graph Builder. J'ai réussi à obtenir les ID de cluster en les traçant séparément et en les fusionnant dans la FrameBox principale. Cependant, cela n'est pas satisfaisant car je ne peux pas contrôler la taille et la couleur de ces étiquettes d'ID de cluster.
J'ai expérimenté une boucle dans une commande Add Graphics Script() mais je n'ai pas réussi à la faire fonctionner.

Voici le script que j'ai utilisé pour produire l'intrigue ci-dessus
Names Default to Here(1);
dt = Data Table ("ANNOTATION of 2D CLUSTERS");
dt_sum = dt << Summary(
Group( :WARD UMAP CLUSTERS ),
Mean( :UMAP1 CENTER by CLUSTER ),
Mean( :UMAP2 CENTER by CLUSTER ),
Freq( "None" ),
Weight( "None" ),
statistics column name format( "column" )
);
gb = dt << Graph Builder(
Size( 483, 675 ),
Fit to Window( "Off" ),
Page Level Fill Color( "White" ),
Graph Spacing( 15 ),
Spacing Borders( 1 ),
Variables( X( :UMAP1 ), Y( :UMAP2 ), Color( :WARD UMAP CLUSTERS ) ),
Elements( Points( X, Y, Legend( 27 ) ) )
);
gbr = report (gb);
main_x_max = gbr [AxisBox(1)] << Get Max;
main_x_min = gbr [AxisBox(1)] << Get Min;
main_y_max = gbr [AxisBox(2)] << Get Max;
main_y_min = gbr [AxisBox(2)] << Get Min;
F_size = gbr[FrameBox(1)] << Get Size;
xbe = Expr(dt_sum << Graph Builder(
Size( _W_, _H_ ),
Fit to Window( "Off" ),
Page Level Fill Color( "White" ),
Graph Spacing( 15 ),
Spacing Borders( 1 ),
Variables(
X( :UMAP1 CENTER by CLUSTER ),
Y( :UMAP2 CENTER by CLUSTER ),
Color( :WARD UMAP CLUSTERS )
),
Elements(
Bar( X, Y, Legend( 4 ), Bar Style( "Float" ), Label( "Label by Row" ) )
)
)
);
xbx = Substitute(Name Expr (xbe), Expr (_W_), F_Size [1],
Expr (_H_), F_size [2]
);
xb = Eval (xbx);
xbr = report (xb);
xbr [AxisBox (1)] << max (main_x_max);
xbr [AxisBox (1)] << min (main_x_min);
xbr [AxisBox (2)] << max (main_y_max);
xbr [AxisBox (2)] << min (main_y_min);
xbr [FrameBox(1)] << Copy Frame Contents;
gbr [FrameBox(1)] << Paste Frame Contents;
Merci.
Meilleur,
TS
Automatisation et scriptsExploration et visualisation des donnéesFenêtresRé: WINDOWS 10 > JMP 17.2 > Générateur de graphiques > Nuage de points > Annotation de cluster dynamiqueVous pouvez ajouter des axes x et y « supplémentaires » et les utiliser. Notez que la couleur a été modifiée pour la moyenne (UMAP2) car elle ne peut pas être laissée par défaut, sinon les couleurs de valeur seront utilisées. Vous pouvez également modifier la taille du marqueur à 0 si vous ne souhaitez pas mettre en surbrillance le point « moyenne » ou modifier le marqueur

Graph Builder(
Size(438, 629),
Show Control Panel(0),
Fit to Window("Off"),
Page Level Fill Color("White"),
Graph Spacing(15),
Spacing Borders(1),
Variables(
X(:UMAP1),
X(:UMAP1 CENTER by CLUSTER, Position(1)),
Y(:UMAP2),
Y(:UMAP2 CENTER by CLUSTER, Position(1)),
Color(:WARD UMAP CLUSTERS)
),
Elements(
Points(X(1), Y(1), Legend(27)),
Points(
X(2),
Y(1),
Color(0),
Legend(32),
Summary Statistic("Mean"),
Label("Label by Row")
)
),
SendToReport(
Dispatch({}, "400", ScaleBox,
{Legend Model(
32,
Properties(0, {Line Color(16)}, Item ID("Mean(UMAP2)", 1))
)}
)
)
);
</CODE></P>
<P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-825409" slang="en-US" mode="CREATE">Ré: WINDOWS 10 > JMP 17.2 > Générateur de graphiques > Nuage de points > Annotation de cluster dynamique</LINGO-SUB><LINGO-BODY id="lingo-body-825409" slang="en-US" mode="CREATE"><P>Salut Jarmo,</P>
<P>Merci d'avoir fourni une solution beaucoup plus simple à mon défi initial. Cependant, j'aimerais modifier la taille et la couleur de la police des étiquettes pour rendre le tracé plus lisible. Avez-vous des indices sur la façon dont je pourrais accomplir cette tâche ?</P>
<P> </P>
<P>Cordialement,</P>
<P>TS</P>
<P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-825424" slang="en-US" mode="CREATE">Ré: WINDOWS 10 > JMP 17.2 > Générateur de graphiques > Nuage de points > Annotation de cluster dynamique</LINGO-SUB><LINGO-BODY id="lingo-body-825424" slang="en-US" mode="CREATE"><P>Je pense que vous devrez alors utiliser un script graphique car les étiquettes n'ont pas beaucoup d'options de personnalisation (pour modifier la taille du texte, vous devrez modifier les préférences de police).</P></LINGO-BODY><LINGO-SUB id="lingo-sub-825436" slang="en-US" mode="CREATE">Ré: WINDOWS 10 > JMP 17.2 > Générateur de graphiques > Nuage de points > Annotation de cluster dynamique</LINGO-SUB><LINGO-BODY id="lingo-body-825436" slang="en-US" mode="CREATE"><P>Intéressant, les étiquettes des graphiques à barres ont une commande pour ajuster la police, mais pas les graphiques à points ?<BR /> <A href="https://community.jmp.com/t5/JMP-Wish-List/Graph-builder-bar-chart-data-label-control/m-p/343142#U343142" class="lia-mention-container-editor-message lia-img-icon-idea-thread lia-fa-icon lia-fa-idea lia-fa-thread lia-fa" target="_blank">Contrôle des étiquettes de données du graphique à barres du générateur de graphiques</A> -> également intéressant pour d'autres types de tracés ?<BR /><BR /></P><P> </P><PRE><CODE class=" language-jsl">Graph Builder(
Variables( X( :WARD UMAP CLUSTERS ) ),
Elements( Bar( X, Legend( 5 ), Label( "Label by Value" ) ) )
);
labels = (current report()[FrameBox(1)] << find segs)[1];
labels << Set Font( "", 18, "", 0 )
Ré: WINDOWS 10 > JMP 17.2 > Générateur de graphiques > Nuage de points > Annotation de cluster dynamiqueSalut tout le monde,
Encore une fois, j'ai essayé de rendre les choses plus compliquées que nécessaire.
Voici le court script JSL que j'ai créé, qui fait tout ce dont j'avais besoin.
Names Default to Here(1);
dt = Data Table ("ANNOTATION of 2D CLUSTERS");
Summarize (dt, clu_id = By (:WARD UMAP CLUSTERS), x_pos = Mean (:UMAP1 CENTER by CLUSTER), y_pos = Mean(:UMAP2 CENTER by CLUSTER));
clu_n = N items (clu_id);
colors = {};
vect = dt:WARD UMAP CLUSTERS << Get Property ("Value Colors");
For (j = 1, j <= clu_n, j++,
insert into(colors, num (word(-1, char(vect [j]), "=")))
);
gb = dt << Graph Builder(
Size( 483, 675 ),
Fit to Window( "Off" ),
Page Level Fill Color( "White" ),
Graph Spacing( 15 ),
Spacing Borders( 1 ),
Variables( X( :UMAP1 ), Y( :UMAP2 ), Color( :WARD UMAP CLUSTERS ) ),
Elements( Points( X, Y, Legend( 27 ) ) ),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Add Graphics Script(
10,
Description( "" ),
Text Size (14);
For( i = 1, i <= clu_n, i++,
Label = clu_id [i];
Fill Color ("white");
Transparency (0.85);
Circle ({x_pos [i], y_pos [i]+0.25}, 0.5, "FILL");
Transparency (1);
Text Color (colors [i]);
Text( center justified, {x_pos [i], y_pos [i]}, Label );
)
)}
)
)
);
Même si je ne suis pas sûr que ma méthode brute de collecte des couleurs de valeur soit efficace, elle fonctionne.
Meilleur,
TS
Ré: WINDOWS 10 > JMP 17.2 > Générateur de graphiques > Nuage de points > Annotation de cluster dynamiqueJe pense que votre méthode est très bien. Vous pouvez également utiliser Arg() pour obtenir les éléments de la liste des couleurs de valeur de « choses ». J'évaluerais également les variables en dehors du script graphique À L'INTÉRIEUR du script graphique pour éviter toutes sortes de problèmes ennuyeux lorsque les variables sont perdues.
J'utiliserais probablement Associative Array pour collecter les identifiants, les couleurs, les coordonnées x et y. Un problème avec cela pourrait être que Summarize et Associative Array pourraient avoir un ordre différent et cela devrait être pris en compte (je ne l'ai pas fait ici).
Names Default To Here(1);
dt = Data Table("ANNOTATION of 2D CLUSTERS");
Summarize(
dt,
clu_id = By(:WARD UMAP CLUSTERS),
x_pos = Mean(:UMAP1 CENTER by CLUSTER),
y_pos = Mean(:UMAP2 CENTER by CLUSTER)
);
vect = dt:WARD UMAP CLUSTERS << Get Property("Value Colors");
aa_colors = Associative Array();
For Each({item, idx}, vect,
aa_colors[Arg(item, 1)] = Associative Array();
aa_colors[Arg(item, 1)]["Color"] = Arg(item, 2);
aa_colors[Arg(item, 1)]["X"] = x_pos[idx];
aa_colors[Arg(item, 1)]["Y"] = y_pos[idx];
);
gb = dt << Graph Builder(
Size(483, 675),
Fit to Window("Off"),
Page Level Fill Color("White"),
Graph Spacing(15),
Spacing Borders(1),
Variables(X(:UMAP1), Y(:UMAP2), Color(:WARD UMAP CLUSTERS)),
Elements(Points(X, Y, Legend(27)))
);
Eval(EvalExpr(
Report(gb)[FrameBox(1)] << Add Graphics Script(
Text Size (14);
myaa = Expr(aa_colors);
ids = myaa << get keys;
For(i = 1, i <= N Items(ids), i++,
Fill Color ("white");
Transparency (0.85);
Circle({myaa[ids[i]]["X"], myaa[ids[i]]["Y"] + 0.25}, 0.5, "FILL");
Transparency(1);
Text Color(myaa[ids[i]]["Color"]);
Text(center justified, {myaa[ids[i]]["X"], myaa[ids[i]]["Y"]}, Char(ids[i]));
);
)
));