Graph Builder – Versatz der Balkendiagramm-BeschriftungDer Graph Builder kann Wertebeschriftungen auf Balkendiagrammen anzeigen. Wenn jedoch auch Daten in das Balkendiagramm eingetragen werden, werden die Beschriftungen vollständig verdeckt.

Glücklicherweise ist es relativ einfach, die Beschriftungen manuell neu zu positionieren. Die korrekte Ausrichtung ist ein kleines bisschen knifflig und es ist relativ frustrierend, dies mehr als einmal zu tun. Sogar das Bearbeiten des Diagrammskripts, um die Ausrichtungen richtig einzustellen, ist nach der zweiten oder dritten Iteration eines Diagramms mühsam. Mit ein wenig JSL-Magie können wir die Rahmen und Balkensegmente finden und die Beschriftungsversätze automatisch anpassen.
Im folgenden Skript wird eine Beispieldatentabelle geöffnet und dann ein Diagrammskript ausgeführt, gefolgt von einigen Formatierungsanweisungen.
Um dieses Skript zu verwenden, ersetzen Sie entweder Ihren Datentabellenverweis oder entfernen Sie die Kommentarzeichen aus der Zeile „dt=current data table();“, damit das Skript für die aktuelle Tabelle ausgeführt wird. Das Skript zum Erstellen von Diagrammen ist ein Beispiel. Sie verwenden RTM>Skript speichern> in Zwischenablage, um Ihr Skript zum Erstellen von Diagrammen abzurufen, und fügen es dann anstelle des Beispiels ein.
names default to here(1);
//paste your data table reference here, or just use the current data table.
dt=Open( "$SAMPLE_DATA/Big Class.jmp" );
//dt=current data table();
obj=dt<<
//Paste your graph builder script here
Graph Builder(
Size( 518, 470 ),
Show Control Panel( 0 ),
Variables( X( :age ), Y( :height ) ),
Elements(
Bar(X,Y,Legend( 4 ),
Error Interval( "Standard Error" ),
Label( "Label by Value" )),
Points( X, Y, Legend( 5 ) )),
SendToReport(
Dispatch( {}, "400", ScaleBox,
{Legend Model(4,
Properties(0,{Fill Color( 0 ), Fill Pattern( "none" )},Item ID( "Mean", 1 )))}))
);
// End of graph builder script.
//Make a reference for the bar chart segments
fbi= N Items( (obj << xpath( "//FrameBox" )) );
for (ii=1, ii<=fbi, ii++,
frame = Report( obj )[FrameBox( ii )];
seg = (frame << Find Seg( "Bar Seg" ));
//Get variable used for the X axis
vars=obj<< Get Variables();
xx=vars[1];xx[1];
//Find the number of bars (or levels used to make bars)
Summarize( levels = By( eval(xx[1])));
Eval List( levels );
//Build an expression to change the offset
qq=expr(set label offset());
for (i=0, i<=nitems(levels)*fbi, i++, //Note there is a multipler, *fbi. This assumes each level is the same for each frame. Its kind of sloppy, might need to just replace it with a fixed value.
rr={};
insert into (rr, i); //This is the Bar number, starts with zero
insert into (rr,i); //This is the x offset, which is the same as the bar number
insert into(rr, 10); //This is the Y offset
insert into (qq, (rr));
);
//Make magic happen
eval(substitute(expr(seg<<QQ></QQ>
<P> </P>
<P>In einem früheren Blogbeitrag habe ich die Schritte beschrieben und ein Automatisierungsskript zum Hinzufügen von Fehlerbalken mit Anmerkungen zu „Dynamite“-Diagrammen, Balkendiagrammen mit einer Intervalllinie, beigefügt. <A href="https://community.jmp.com/t5/Byron-Wingerd-s-Blog/One-Way-ANOVA-Figure-for-Scientists/ba-p/265156" target="_blank">https://community.jmp.com/t5/Byron-Wingerd-s-Blog/One-Way-ANOVA-Figure-for-Scientists/ba-p/265156</A></P><LINGO-TEASER id="lingo-teaser-777858" slang="en-US" mode="UPDATE"><P>Verdecken Ihre Daten Ihre Datenbeschriftungen?</P></LINGO-TEASER><LINGO-LABS id="lingo-labs-777858" slang="en-US" mode="UPDATE"><LINGO-LABEL>Automatisierung und Skripting</LINGO-LABEL><LINGO-LABEL>Grundlegende Datenanalyse und Modellierung</LINGO-LABEL><LINGO-LABEL>Datenexploration und -visualisierung</LINGO-LABEL><LINGO-LABEL>Ergebnisse teilen und kommunizieren</LINGO-LABEL></LINGO-LABS>Betreff: Beschriftung für Balkendiagramm im Graph Builder korrigiertHallo @Byron_JMP , toller Trick. Sehr nützlich.
alternativ könnte man die Beschriftungen einem zweiten Balkendiagrammelement hinzufügen:
dt=Open( "$SAMPLE_DATA/Big Class.jmp" );
Graph Builder(
Size( 563, 522 ),
Summary Statistic( "Median" ),
Graph Spacing( 4 ),
Variables( X( :age ), Y( :height ) ),
Elements(
Bar( X, Y, Legend( 4 ), Error Interval( "Standard Error" ) ),
Points( X, Y, Legend( 5 ) ),
Bar( X, Y, Legend( 6 ), Bar Style( "Float" ), Label( "Label by Value" ) )
)
);
Ich habe oft ein damit verbundenes Problem: kein Platz für horizontale Beschriftungen:

Gibt es eine Problemumgehung über JSL, um die Beschriftungen zu drehen?
Betreff: Graph Builder - Balkendiagramm-Beschriftung korrigiertEs klingt, als ob Sie die Beschriftungen gerne folgendermaßen rotieren lassen möchten:

Ohne Ihre Frage hätte ich es nicht versucht. Es gibt ein obskures JSL, mit dem Sie die Schrifteigenschaften UND den Winkel festlegen können. Ehrlich gesagt habe ich das noch nie zuvor gesehen und es sieht ziemlich fantastisch aus.
Die JSL lautet: Set Font( "" , 18 , "" , 90 ). Die Schriftart ist "", die Größe ist 18 Punkte, die Formatierung ist "", und der Winkel ist 90. Im Skriptindex des Beispiels sind die Schriftart und die Formatierung angegeben, aber wenn diese durch "" ersetzt werden, scheint die Standardeinstellung zu verwenden. Wenn Sie den Winkel auf -90 ändern, wird der Text von unten nach oben gelesen.
names default to here(1);
//paste your data table reference here, or just use the current data table.
dt=Open( "$SAMPLE_DATA/Big Class.jmp" );
//dt=current data table();
obj=dt<<
//Paste your graph builder script here
Graph Builder(
Size( 518, 470 ),
Show Control Panel( 0 ),
Variables( X( :age ), Y( :height ) ),
Elements(
Bar(X,Y,Legend( 4 ),
Error Interval( "Standard Error" ),
Label( "Label by Value" )),
Points( X, Y, Legend( 5 ) )),
SendToReport(
Dispatch( {}, "400", ScaleBox,
{Legend Model(4,
Properties(0,{Fill Color( 0 ), Fill Pattern( "none" )},Item ID( "Mean", 1 )))}),
Dispatch( {}, "Graph Builder", FrameBox,
{DispatchSeg(
BarSeg( 1 ),
Set Font( "", 18, "", 90 )
)}
)
)
);
// End of graph builder script.
//Make a reference for the bar chart segments
fbi= N Items( (obj << xpath( "//FrameBox" )) );
for (ii=1, ii<=fbi, ii++,
frame = Report( obj )[FrameBox( ii )];
seg = (frame << Find Seg( "Bar Seg" ));
//Get variable used for the X axis
vars=obj<< Get Variables();
xx=vars[1];xx[1];
//Find the number of bars (or levels used to make bars)
Summarize( levels = By( eval(xx[1])));
Eval List( levels );
//Build an expression to change the offset
qq=expr(set label offset());
for (i=0, i<=nitems(levels)*fbi, i++, //Note there is a multipler, *fbi. This assumes each level is the same for each frame. Its kind of sloppy, might need to just replace it with a fixed value.
rr={};
insert into (rr, i); //This is the Bar number, starts with zero
insert into (rr,i); //This is the x offset, which is the same as the bar number
insert into(rr, 10); //This is the Y offset
insert into (qq, (rr));
);
//Make magic happen
eval(substitute(expr(seg<<QQ></QQ>
<P> </P>Betreff: Graph Builder - Balkendiagramm-Beschriftungsversatzcool! unglaublich!
Danke.
Betreff: Graph Builder - Balkendiagramm-BeschriftungsversatzHm ...
Ich habe mich nur gefragt, wie ich es geschafft habe, die Beschriftungen vom oberen Rand des Diagramms wegzubekommen … ohne JSL.
-> Ah: JMP17!
Hier ein weiterer Workaround für den „ Bar Graph Label Offset “:
Wechseln Sie zurück zu JMP 17 und verwenden Sie das Alter auf der X-Achse als Overlay :
// JMP 17!
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << new column("one", set each value(1));
dt << Graph Builder(
Variables( X( :age ), Y( :height ), Overlay( :age ), Color( :one ) ),
Elements(
Bar(
X,
Y,
Legend( 1 ),
Summary Statistic( "Mean" ),
Error Interval( "Standard Error" ),
Label( "Label by Value" )
),
Points( X, Y, Overlay( 0 ), Legend( 2 ) )
),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
1,
Properties(
0,
{Fill Color( 0 ), Fill Pattern( "none" )},
Item ID( "1", 1 )
)
), Legend Model(
2,
Properties( 0, {Line Color( 0 )}, Item ID( "1", 1 ) )
)}
)
)
);

Nachteile:
– es scheint einen Fehler mit den Fehlerbalken zu geben, der mit JMP18 behoben wurde.
– keine der anderen coolen JMP 18-Funktionen.
Betreff: Graph Builder - Balkendiagramm-BeschriftungsversatzIch denke an alle JMP-Benutzer ohne JSL-Erfahrung …
Eigentlich sollte es direkt in der GUI eine Steuerung zur Platzierung der Beschriftungen geben.
Ah, es gibt einen Wunsch aus dem Jahr 2020 von @shampton82 mit dieser Idee:
Steuerelement für Balkendiagramm-Datenbeschriftung im Graph Builder
Betreff: Graph Builder - Balkendiagramm-BeschriftungsversatzDanke für den Link zu diesem Blog und dem Wunschlisteneintrag @hogi ! Es ist zwar toll, dass wir mit JSL so viele Funktionen hinzufügen können, aber eines der peinlichsten Dinge beim Vorführen von JMP ist, dass man grundlegende Dinge mit Diagrammanpassungen nicht machen kann, die Benutzer in Excel machen können (und an die sie so gewöhnt sind, dass sie fassungslos sind, dass man das in JMP nicht so einfach machen kann).
@Byron_JMP Bitte arbeiten Sie mit dem JMP-Team zusammen, um diese großartige Anpassung nicht-JSL-basiert zu machen!
Steve
Betreff: Graph Builder - Balkendiagramm-Beschriftungsversatzzustimmen.
Betreff: Graph Builder - Balkendiagramm-BeschriftungsversatzIch habe gerade herausgefunden, was der Unterschied zwischen JMP 17 und JMP18 ist:
Beim Wechsel in den Stapelmodus wird die Beschriftung in JMP18 zentriert.
Leider ist dieser Modus nicht mit den Fehlerbalken kompatibel.
Daher muss man die Fehlerbalken mit einem weiteren schwebenden Balkendiagramm hinzufügen.
In Summe:

100 % GUI – 0 % Skripting.
hier ist das Skript:
Mehr sehen...Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Graph Builder(
Size( 521, 429 ),
Variables( X( :age ), Y( :height ) ),
Elements(
Points( X, Y, Legend( 2 ) ),
Bar(
X,
Y,
Bar Style( "Stacked" ),
Summary Statistic( "Mean" ),
Label( "Label by Value" )
),
Bar(
X,
Y,
Bar Style( "Float" ),
Summary Statistic( "Mean" ),
Error Interval( "Standard Error" )
)
)
);
... Ich hoffe, dass dieser Beitrag nicht dazu verwendet wird, gegen die neue Funktion zur Angabe der Beschriftungsposition zu werben.
Betreff: Graph Builder - Balkendiagramm-BeschriftungsversatzVielen Dank für diese Beiträge. Das wird hilfreich sein.
Betreff: Graph Builder - Balkendiagramm-BeschriftungsversatzVerfügt ein Heatmap-Diagramm auch über ein „Segment“, mit dem kommuniziert werden kann?
nicht in dieser Liste:

heißt es Heatmap Cells Seg ?
myseg << get description = "Heatmap Cells";
-> nein.
Betreff: Graph Builder - Balkendiagramm-BeschriftungsversatzRechtecksegment.
Leider ist Heatmap Seg = Rect Seg ziemlich taub : (