WINDOWS 10 > JMP 17.2 > Graph Builder > Streudiagramm > Dynamische Cluster-AnnotationHallo JMP-Community,
Windows Pro 10 – JMP 17.2
Ich habe einige Daten auf ein 2D-UMAP projiziert und möchte die formatierte (Farbe und Größe) Cluster-ID automatisch über das UMAP2 x UMAP1-Streudiagramm im Graph Builder einfügen. Ich habe es geschafft, die Cluster-IDs zu erhalten, indem ich sie separat dargestellt und mit der Haupt-FrameBox zusammengeführt habe. Dies ist jedoch unbefriedigend, da ich die Größe und Farbe dieser Cluster-ID-Beschriftungen nicht steuern kann.
Ich habe mit einer Schleife innerhalb eines „Add Graphics Script()“-Befehls experimentiert, konnte es aber nicht zum Laufen bringen.

Hier ist das Skript, das ich zur Erstellung der obigen Handlung verwendet habe
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;
Danke schön.
Am besten,
TS
Automatisierung und SkriptingDatenexploration und -visualisierungWindowsBetreff: WINDOWS 10 > JMP 17.2 > Graph Builder > Streudiagramm > Dynamische Cluster-AnnotationSie können „zusätzliche“ x- und y-Achsen hinzufügen und diese dann verwenden. Beachten Sie, dass die Farbe für den Mittelwert (UMAP2) geändert wurde, da sie nicht als Standard belassen werden kann, da sonst Wertfarben verwendet werden. Sie können die Markierungsgröße auch auf 0 ändern, wenn Sie den „Mittelwert“-Punkt nicht hervorheben oder die Markierung ändern möchten.

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">Betreff: WINDOWS 10 > JMP 17.2 > Graph Builder > Streudiagramm > Dynamische Cluster-Annotation</LINGO-SUB><LINGO-BODY id="lingo-body-825409" slang="en-US" mode="CREATE"><P>Hallo Jarmo,</P>
<P>Vielen Dank, dass Sie mir eine viel einfachere Lösung für mein anfängliches Problem geboten haben. Dennoch möchte ich die Schriftgröße und Farbe der Beschriftungen ändern, um die Darstellung lesbarer zu machen. Haben Sie irgendwelche Hinweise, wie ich diese Aufgabe erreichen könnte?</P>
<P> </P>
<P>Beste grüße,</P>
<P>TS</P>
<P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-825424" slang="en-US" mode="CREATE">Betreff: WINDOWS 10 > JMP 17.2 > Graph Builder > Streudiagramm > Dynamische Cluster-Annotation</LINGO-SUB><LINGO-BODY id="lingo-body-825424" slang="en-US" mode="CREATE"><P>Ich glaube, dann müssen Sie ein Grafikskript verwenden, da es für Etiketten nicht so viele Anpassungsmöglichkeiten gibt (um die Textgröße zu ändern, müssten Sie die Schriftarteinstellungen ändern).</P></LINGO-BODY><LINGO-SUB id="lingo-sub-825436" slang="en-US" mode="CREATE">Betreff: WINDOWS 10 > JMP 17.2 > Graph Builder > Streudiagramm > Dynamische Cluster-Annotation</LINGO-SUB><LINGO-BODY id="lingo-body-825436" slang="en-US" mode="CREATE"><P>Interessant. Für die Beschriftungen von Balkendiagrammen gibt es einen Befehl zum Anpassen der Schriftart, für Punktdiagramme jedoch nicht?<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">Graph Builder-Balkendiagramm-Datenbeschriftungssteuerung</A> -> auch für andere Diagrammtypen interessant?<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 )
Betreff: WINDOWS 10 > JMP 17.2 > Graph Builder > Streudiagramm > Dynamische Cluster-AnnotationHallo zusammen,
Wieder einmal habe ich versucht, es komplizierter als nötig zu machen.
Hier ist das kurze JSL-Skript, das ich erstellt habe und das alles macht, was ich brauchte.
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 );
)
)}
)
)
);
Obwohl ich nicht sicher bin, ob meine grobe Methode zum Sammeln der Wertfarben effizient ist, funktioniert sie.
Am besten,
TS
Betreff: WINDOWS 10 > JMP 17.2 > Graph Builder > Streudiagramm > Dynamische Cluster-AnnotationIch finde, Ihre Methode ist völlig in Ordnung. Sie können auch Arg() verwenden, um die Elemente aus der Wertefarbenliste von „Dingen“ abzurufen. Ich würde die Variablen auch außerhalb des Grafikskripts INNERHALB des Grafikskripts auswerten, um alle möglichen lästigen Probleme zu vermeiden, wenn die Variablen verloren gehen.
Ich würde höchstwahrscheinlich Associative Array verwenden, um IDs, Farben, X- und Y-Koordinaten zu sammeln. Ein Problem dabei könnte sein, dass Summarize und Associative Array möglicherweise eine unterschiedliche Reihenfolge haben und dies berücksichtigt werden müsste (ich habe es hier nicht getan).
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]));
);
)
));