So fügen Sie Balkendiagrammen einen Rahmen (Umriss) hinzu/passen ihn anHallo JMP-Community,
Ich möchte jedem Balken in einem Balkendiagramm eine Kontur/einen Rahmen hinzufügen und dessen Breite anpassen. Wie kann ich das in JMP realisieren?
Wie im Bild unten gezeigt, möchte ich um jeden Balken einen Rahmen oder eine Kontur hinzufügen.

Ich habe von einer Methode gehört, bei der zwei Balkendiagramme übereinandergelegt werden, um eine Kontur zu simulieren. Allerdings scheint diese Methode keine Anpassung der Konturbreite zu ermöglichen.
Gibt es eine Möglichkeit, entweder über die Benutzeroberfläche des Graph Builders oder durch Bearbeiten eines Skripts, jedem Balken eine Kontur zuzuweisen und dessen Farbe und Breite unabhängig voneinander zu ändern?
Ich verwende derzeit JMP Student Edition 19.
Vielen Dank im Voraus für Ihre Hilfe!
Grundlagen der Datenanalyse und ModellierungDatenexploration und -visualisierungBetreff: Wie man Balkendiagrammen einen Rahmen hinzufügt/anpasstIch denke, die Verwendung eines zweiten Balkendiagramms wäre eine akzeptable Lösung, erfordert aber etwas Aufwand, da Sie eine zusätzliche Spalte erstellen müssten, um die korrekten Höhen zu erhalten, und anschließend das Breitenverhältnis anpassen müssten. Dies wurde bereits mit dieser Methode umgesetzt.

Hier ist ein Beispielskript, das Sie ausführen können, um zu erkunden, wie das Diagramm erstellt wurde (die Reihenfolge der Balken wurde geändert, das Breitenverhältnis wurde angepasst, die Farbe wurde geändert usw.).
Mehr anzeigen...
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt << New Column("Mean[height][age]",
Numeric,
"Continuous",
Formula(Col Mean(:height, :age) + 1)
);
gb = dt << Graph Builder(
Size(656, 549),
Show Control Panel(0),
Variables(
X(:age),
Y(:height),
Y(:"Mean[height][age]"n, Position(1)),
Overlay(:age)
),
Elements(
Bar(X, Y(1), Legend(6), Bar Style("Stacked")),
Bar(X, Y(2), Legend(7), Bar Style("Stacked"))
),
SendToReport(
Dispatch({}, "400", ScaleBox,
{Legend Model(
7,
Base(0, 0, 0, Item ID("12", 1)),
Base(1, 0, 1, Item ID("13", 1)),
Base(2, 0, 2, Item ID("14", 1)),
Base(3, 0, 3, Item ID("15", 1)),
Base(4, 0, 4, Item ID("16", 1)),
Base(5, 0, 5, Item ID("17", 1)),
Type Properties(0, "Bar", {Fill Color(0)}),
Properties(0, {Fill Color(0)}, Item ID("12", 1)),
Properties(1, {Fill Color(0)}, Item ID("13", 1)),
Properties(2, {Fill Color(0)}, Item ID("14", 1)),
Properties(3, {Fill Color(0)}, Item ID("15", 1)),
Properties(4, {Fill Color(0)}, Item ID("16", 1)),
Properties(5, {Fill Color(0)}, Item ID("17", 1))
)}
),
Dispatch({}, "Graph Builder", FrameBox,
{Reorder Segs({1, 2, 4}), DispatchSeg(
BarSeg(1),
{Set Width Proportion(0.7)}
)}
),
Dispatch({}, "400", LegendBox,
{Legend Position({6, [0, 1, 2, 3, 4, 5], 7, [-1, -1, -1, -1, -1, -1]})}
)
)
);
Betreff: Wie man Balkendiagrammen einen Rahmen hinzufügt/anpasst@jthi hat eine gute Lösung. Ich neige dazu, die grafischen Grundelemente von JMP zu verwenden, mit denen man direkt Linien und Rechtecke zeichnen und deren Farbe und Stärke festlegen kann.
Siehe „Grafikskript hinzufügen“ im Skriptindex und im Skriptleitfaden für Dokumentation und Beispiele, wie dies funktioniert.
Betreff: Wie man Balkendiagrammen einen Rahmen hinzufügt/anpasstWeitere (gute) Optionen wären:
- Mithilfe von Graphic Script. Sie müssen die Anzahl der Balken kennen, und ich glaube nicht, dass Sie diese Information aus dem BarSeg-Objekt erhalten können. Daher ist es einfacher, dem Diagramm eine Hilfsmarkierung hinzuzufügen (diese kann im endgültigen Diagramm ausgeblendet werden).
- Verwenden Sie den Marker-Zeichenausdruck. Dies erfordert das Hinzufügen eines Markers und ist schwieriger zu implementieren, stellt aber höchstwahrscheinlich die robustere Option dar.
Ich habe jetzt keine Zeit, diese Optionen aufzuschreiben, aber sie existieren.
Betreff: Wie man Balkendiagrammen einen Rahmen hinzufügt/anpasstIch hatte Zeit, das grafische Skript zu erstellen.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Size(656, 549),
Show Control Panel(0),
Variables(X(:age), Y(:height)),
Elements(
Bar(X, Y, Legend(4)),
Points(X, Y, Legend(5), Summary Statistic("Mean"))
),
SendToReport(
Dispatch({}, "400", ScaleBox,
{Legend Model(
5,
Type Properties(0, "Marker", {Transparency(0)}),
Properties(0, {Transparency(0)}, Item ID("Mean", 1))
)}
)
)
);
fb = Report(gb)[FrameBox(1)];
fb << Add Graphics Script(Function({this}, // can be laggy as it is a graphic script with a loop
ms = this << Find Seg(MarkerSeg(1));
xs = ms << Get X Values;
ys = ms << Get Y Values;
sideshift = 0.27;
For(i = 1, i <= N Items(xs), i++,
Pen Size(10); // Width of the line
Pen Color("Black");
Rect(xs[i] - sideshift, ys[i], xs[i] + sideshift, -1, 0);
);
));

Und hier ist Marker Draw Expr.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Size(656, 549),
Show Control Panel(0),
Variables(X(:age), Y(:height)),
Elements(
Bar(X, Y, Legend(4)),
Points(X, Y, Legend(5), Summary Statistic("Mean"))
),
SendToReport(
Dispatch({}, "400", ScaleBox,
{Legend Model(
5,
Type Properties(0, "Marker", {Transparency(0)}),
Properties(0, Item ID("Mean", 1))
)}
)
)
);
fb = Report(gb)[FrameBox(1)];
seg = (fb << FindSeg(Marker Seg(1)));
seg << Set Marker Draw Expr(
Function({this seg, this row, x, y, size, row state},
Pen Size(10); // Width of the line
Pen Color("Black");
Rect(x - 0.27, y, x + 0.27, -1, 0);
)
);

Betreff: Wie man Balkendiagrammen einen Rahmen hinzufügt/anpasst@jthi ,
Das Beispiel „Marker Draw Expr“ funktioniert in meiner JMP 19-Installation nicht korrekt. Die Standardtransparenz des Markers scheint auf 0 gesetzt zu sein. Die folgende einfache Änderung sorgt dafür, dass das Rechteck korrekt angezeigt wird.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Size(656, 549),
Show Control Panel(0),
Variables(X(:age), Y(:height)),
Elements(
Bar(X, Y, Legend(4)),
Points(X, Y, Legend(5), Summary Statistic("Mean"))
),
SendToReport(
Dispatch({}, "400", ScaleBox,
{Legend Model(
5,
Type Properties(0, "Marker", {Transparency(0)}),
Properties(0, Item ID("Mean", 1))
)}
)
)
);
fb = Report(gb)[FrameBox(1)];
seg = (fb << FindSeg(Marker Seg(1)));
seg << Set Marker Draw Expr(
Function({this seg, this row, x, y, size, row state},
show(x,y);
Pen Size(10); // Width of the line
Pen Color("Black");
transparency(1); // Needed for JMP 19
Rect(x - 0.27, y, x + 0.27, -1, 0);
)
);
Betreff: Wie man Balkendiagrammen einen Rahmen hinzufügt/anpasstWenn Ihnen eine dünne Linie als Rahmen genügt, ist das ganz einfach: Fügen Sie einfach ein zweites Balkendiagramm mit pattern = "none" hinzu und passen Sie die Farbe beispielsweise auf Schwarz an.

Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Graph Builder(
Size( 469, 365 ),
Summary Statistic( "Median" ),
Variables( X( :age ), Y( :height ), Overlay( :sex ), Color( :sex ) ),
Elements(
Bar( X, Y, Bar Style( "Stacked" ) ),
Bar( X, Y, Legend( 2 ), Bar Style( "Stacked" ) )
),
SendToReport(
Dispatch( {}, "400", ScaleBox,
{Legend Model(
2,
Properties(
0,
{Fill Color( 0 ), Fill Pattern( "none" )},
Item ID( "F", 1 )
),
Properties(
1,
{Fill Color( 0 ), Fill Pattern( "none" )},
Item ID( "M", 1 )
)
)}
)
)
);
Betreff: Wie man Balkendiagrammen einen Rahmen hinzufügt/anpasst@txnelson
Vielen Dank für Ihre ausführlichen Antworten. Das war sehr hilfreich. Aber es gibt da noch eine Sache, die ich gerne tun würde.
Wenn ich mit Set Marker Draw Expr einen Balkenrahmen zeichne, wird dieser auf der obersten Ebene gezeichnet.
Wenn ich also Fehlerbalken oder einzelne Datenpunkte (über ein Punktediagramm) hinzufüge, wird der benutzerdefinierte Rahmen darüber gezeichnet.
Gibt es eine Möglichkeit, die Zeichenreihenfolge (Ebene) des Rahmens so zu steuern, dass er hinter den Datenpunkten erscheint?
Für hochgradig individualisierte Grafiken: Verwenden Anwender typischerweise Skriptsprachen wie R oder spezielle Software wie GraphPad Prism?
Betreff: Wie man Balkendiagrammen einen Rahmen hinzufügt/anpasstSie können die Reihenfolge der einzelnen Elemente anpassen:
Klicken Sie mit der rechten Maustaste in das Diagramm und ändern Sie die Reihenfolge:

Wenn es nur einen Plottyp gibt, fügen Sie einfach 20 hinzu und passen Sie diese an.
Graph Builder ist um ein Vielfaches flexibler und leistungsfähiger, als man auf den ersten Blick vermuten würde. Das ist der Trick:
Ein reibungsloser Übergang von kinderleichter Drag-and-Drop-Funktionalität zu hochgradig individualisierbaren Diagrammen.
Mit Set Marker Draw Expr haben Sie bereits eine sehr ausgefeilte Funktion kennengelernt – aber es gibt noch viele weitere Funktionen.
Es ist nicht nötig, ein anderes Plottool zu verwenden.
Betreff: Wie man Balkendiagrammen einen Rahmen hinzufügt/anpasstZeichnen Sie Ihr Diagramm mit den neuen Rahmen und Fehlerbalken. Klicken Sie dann mit der rechten Maustaste auf das Diagramm und wählen Sie „Benutzerdefiniert“. Es öffnet sich ein Dialogfeld, in dem Sie die Fehlerbalken auswählen und in den Vordergrund verschieben können. Schließen Sie das Dialogfeld und klicken Sie anschließend auf das rote Dreieck, um das Skript zu speichern. Sie können das erstellte Skript nun untersuchen und sehen, was nötig ist, um die Fehlerbalken mithilfe von JSL in den Vordergrund zu verschieben.