WINDOWS 10 > JMP 17.2 > Generatore grafico > Diagramma di dispersione > Annotazione cluster dinamicaCiao comunità JMP,
Windows Pro 10 - JMP 17.2
Ho alcuni dati proiettati su un UMAP 2D e vorrei inserire automaticamente l'ID Cluster formattato (colore e dimensione) sopra il grafico a dispersione UMAP2 x UMAP1 in Graph Builder. Sono riuscito a ottenere gli ID Cluster tracciandoli separatamente e unendoli al FrameBox principale. Tuttavia, questo non è soddisfacente perché non posso controllare la dimensione e il colore di quelle etichette ID Cluster.
Ho sperimentato un Loop all'interno di un comando Add Graphics Script() ma non sono riuscito a farlo funzionare.

Ecco lo script che ho usato per produrre la trama sopra
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;
Grazie.
Migliore,
STUDENTI
Automazione e scriptingEsplorazione e visualizzazione dei datiFinestreRe: WINDOWS 10 > JMP 17.2 > Generatore grafico > Diagramma di dispersione > Annotazione cluster dinamicaPotresti aggiungere assi x e y "extra" e poi usarli. Nota che il colore è stato cambiato per la media (UMAP2) in quanto non può essere lasciato come predefinito o useranno colori valore. Puoi anche cambiare la dimensione del marcatore a 0 se non vuoi evidenziare il punto "medio" o cambiare il marcatore

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">Re: WINDOWS 10 > JMP 17.2 > Generatore grafico > Diagramma di dispersione > Annotazione cluster dinamica</LINGO-SUB><LINGO-BODY id="lingo-body-825409" slang="en-US" mode="CREATE"><P>Ciao Jarmo,</P>
<P>Grazie per aver fornito una soluzione molto più semplice alla mia sfida iniziale. Tuttavia, vorrei cambiare la dimensione del carattere e il colore delle etichette per rendere il grafico più leggibile. Hai qualche indizio su come potrei raggiungere questo obiettivo?</P>
<P> </P>
<P>Distinti saluti,</P>
<P>STUDENTI</P>
<P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-825424" slang="en-US" mode="CREATE">Re: WINDOWS 10 > JMP 17.2 > Generatore grafico > Diagramma di dispersione > Annotazione cluster dinamica</LINGO-SUB><LINGO-BODY id="lingo-body-825424" slang="en-US" mode="CREATE"><P>Penso che allora dovrai utilizzare uno script grafico poiché le etichette non hanno molte opzioni di personalizzazione (per cambiare la dimensione del testo dovresti cambiare le preferenze del carattere).</P></LINGO-BODY><LINGO-SUB id="lingo-sub-825436" slang="en-US" mode="CREATE">Re: WINDOWS 10 > JMP 17.2 > Generatore grafico > Diagramma di dispersione > Annotazione cluster dinamica</LINGO-SUB><LINGO-BODY id="lingo-body-825436" slang="en-US" mode="CREATE"><P>Interessante. Le etichette dei grafici a barre hanno un comando per regolare il carattere, mentre i grafici a punti no?<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">Controllo delle etichette dei dati del grafico a barre del generatore di grafici</A> -> interessante anche per altri tipi di grafici?<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 )
Re: WINDOWS 10 > JMP 17.2 > Generatore grafico > Diagramma di dispersione > Annotazione cluster dinamicaCiao a tutti,
Ancora una volta ho cercato di renderlo più complicato del necessario.
Ecco il breve script JSL che ho creato, che fa tutto ciò di cui ho bisogno.
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 );
)
)}
)
)
);
Anche se non sono sicuro che il mio metodo rudimentale per raccogliere i Colori di Valore sia efficiente, funziona.
Migliore,
STUDENTI
Re: WINDOWS 10 > JMP 17.2 > Generatore grafico > Diagramma di dispersione > Annotazione cluster dinamicaPenso che il tuo metodo vada bene. Puoi anche usare Arg() per ottenere gli elementi dall'elenco dei colori dei valori di "cose". Valuterei anche le variabili al di fuori dello script grafico ALL'INTERNO dello script grafico per evitare ogni genere di fastidioso problema quando le variabili vengono perse.
Probabilmente userei Associative Array per raccogliere id, colori, coordinate x e y. Un problema con questo potrebbe essere che Summarize e Associative Array potrebbero avere un ordinamento diverso e dovrebbe essere preso in considerazione (non l'ho fatto qui).
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]));
);
)
));