WINDOWS 10 > JMP 17.2 > Generador de gráficos > Diagrama de dispersión > Anotación de clústeres dinámicosHola comunidad JMP,
Windows Pro 10: JMP 17.2
Tengo algunos datos proyectados en un UMAP 2D y me gustaría insertar automáticamente el ID de clúster formateado (color y tamaño) en la parte superior del diagrama de dispersión UMAP2 x UMAP1 en Graph Builder. Logré obtener los ID de clúster al trazarlos por separado y fusionarlos en el FrameBox principal. Sin embargo, esto no es satisfactorio porque no puedo controlar el tamaño y el color de esas etiquetas de ID de clúster.
Experimenté con un bucle dentro de un comando Agregar gráficos Script() pero no pude hacerlo funcionar.

Aquí está el guión que utilicé para producir la trama anterior.
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;
Gracias.
Mejor,
TS
Automatización y scriptingExploración y visualización de datosVentanasRe: WINDOWS 10 > JMP 17.2 > Generador de gráficos > Diagrama de dispersión > Anotación de clústeres dinámicosPuede agregar ejes x e y "adicionales" y luego usarlos. Tenga en cuenta que se cambió el color de la media (UMAP2), ya que no se puede dejar como predeterminado o se usarán colores de valor. También puede cambiar el tamaño del marcador a 0 si no desea resaltar el punto "medio" o cambiar el marcador.

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 > Generador de gráficos > Diagrama de dispersión > Anotación de clústeres dinámicos</LINGO-SUB><LINGO-BODY id="lingo-body-825409" slang="en-US" mode="CREATE"><P>Hola jarmo,</P>
<P>Gracias por brindar una solución mucho más sencilla a mi desafío inicial. Aún así, me gustaría cambiar el tamaño y el color de la fuente de las etiquetas para que el gráfico sea más legible. ¿Tiene alguna pista sobre cómo podría lograr esa tarea?</P>
<P> </P>
<P>Atentamente,</P>
<P>TS</P>
<P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-825424" slang="en-US" mode="CREATE">Re: WINDOWS 10 > JMP 17.2 > Generador de gráficos > Diagrama de dispersión > Anotación de clústeres dinámicos</LINGO-SUB><LINGO-BODY id="lingo-body-825424" slang="en-US" mode="CREATE"><P>Creo que entonces tendrás que utilizar un script gráfico, ya que las etiquetas no tienen muchas opciones de personalización (para cambiar el tamaño del texto tendrías que cambiar las preferencias de fuente).</P></LINGO-BODY><LINGO-SUB id="lingo-sub-825436" slang="en-US" mode="CREATE">Re: WINDOWS 10 > JMP 17.2 > Generador de gráficos > Diagrama de dispersión > Anotación de clústeres dinámicos</LINGO-SUB><LINGO-BODY id="lingo-body-825436" slang="en-US" mode="CREATE"><P>Interesante, las etiquetas de los gráficos de barras tienen un comando para ajustar la fuente, pero los gráficos de puntos 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">Control de etiquetas de datos del gráfico de barras del generador de gráficos</A> -> ¿interesante también para otros tipos de gráficos?<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 > Generador de gráficos > Diagrama de dispersión > Anotación de clústeres dinámicosHola a todos,
Una vez más intenté hacerlo más complicado de lo necesario.
Aquí está el breve script JSL que creé, que hace todo lo que necesitaba.
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 );
)
)}
)
)
);
Aunque no estoy seguro de si mi método básico para recopilar los colores de valor es eficiente, funciona.
Mejor,
TS
Re: WINDOWS 10 > JMP 17.2 > Generador de gráficos > Diagrama de dispersión > Anotación de clústeres dinámicosCreo que tu método está bien. También puedes usar Arg() para obtener los elementos de la lista de colores de valores de "cosas". También evaluaría las variables fuera del script gráfico DENTRO del script gráfico para evitar todo tipo de problemas molestos cuando se pierden las variables.
Lo más probable es que utilice Associative Array para recopilar identificadores, colores y coordenadas x e y. Un problema con esto podría ser que Summarize y Associative Array podrían tener un orden diferente y debería tenerse en cuenta (no lo he hecho aquí).
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]));
);
)
));