Ich habe ein Skript, das Boxplots in Graph Builder generiert, aber so, wie es zuerst aus einem Diagramm erfasst wurde. Hier ist der Code:
inboundDataTable << New Script("Boxplots and Means for Sites w/Low Read Rates",
Names Default to Here(1);
Delete Symbols();
inboundData = Current Data Table();
inboundData << Graph Builder(
Size(650, 481),
Grid Color({79, 98, 40}),
Variables(X(:IDENT Code), Y(:Read Rate)),
Elements(
Box Plot(X, Y, Legend(2), Jitter("Random Normal")),
Points(X, Y, Legend(3), Summary Statistic("Mean"))
),
SendToReport(
Dispatch(
{},
"Read Rate",
ScaleBox,
{
Format("Percent", 5, 0),
Minor Ticks(4),
Add Ref Line(0.95, "Solid", {255, 0, 0}, "", 1),
Label Row({Show Major Grid(1), Show Minor Grid(1)})
}
),
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
2,
Base(1, 0, 0, Item ID("Read Rate", 2)),
Properties(1, {Fill Color(0)}, Item ID("Read Rate", 2)),
Properties(
-1,
{Line Color(-4221340), Marker("FilledCircle"), Fill Color(0)},
Item ID("Mean", 1)
)
), Legend Model(
3,
Properties(
0,
{Line Color(-16776960), Marker("Diamond"), Fill Color(0)},
Item ID("Mean", 1)
)
)}
),
Dispatch({}, "X title", TextEditBox, {Set Text("Crossing (Site)")}),
Dispatch(
{},
"Graph Builder",
FrameBox,
{
Marker Size(5), Grid Line Order(1), Reference Line Order(2),
DispatchSeg(
Box Plot Seg("Box Plot (ALC)"),
{Line Color({44, 77, 117}), Fill Color({79, 129, 189}), Fill(1)}
),
DispatchSeg(
Box Plot Seg("Box Plot (CIA)"),
{Line Color({44, 77, 117}), Fill Color({79, 129, 189}), Fill(1)}
),
DispatchSeg(
Box Plot Seg("Box Plot (JKM)"),
{Line Color({44, 77, 117}), Fill Color({79, 129, 189}), Fill(1)}
),
DispatchSeg(
Box Plot Seg("Box Plot (POR)"),
{Line Color({44, 77, 117}), Fill Color({79, 129, 189}), Fill(1)}
),
DispatchSeg(
Box Plot Seg("Box Plot (RAI)"),
{Line Color({44, 77, 117}), Fill Color({79, 129, 189}), Fill(1)}
),
DispatchSeg(
Box Plot Seg("Box Plot (THO)"),
{Line Color({44, 77, 117}), Fill Color({79, 129, 189}), Fill(1)}
)
}
)
)
)
);Unten befindet sich der FrameBox-Block, in dem Sie ein DispatchSeg für jeden Boxplot sehen können, der aus dem Originaldiagramm erstellt wurde. Ich möchte diesen Abschnitt des Codes dynamisch gestalten, da die Anzahl der Sites für jede Site-Population unterschiedlich sein kann.
Was ich brauche, ist eine Möglichkeit, die Anzahl der eindeutigen Sites zu erfassen, die nicht ausgeschlossen wurden, und diese Anzahl dann zu verwenden, um eine Schleife zu erstellen, um die Linien- und Füllfarben für jeden Boxplot festzulegen. Wie kann ich das angehen?
@mdawson69 ,
Das Beispiel enthält möglicherweise „zu viele Informationen“. Es wurde als Lernskript zum Anpassen von GraphBuilder für JMP 13 erstellt, funktioniert aber für spätere Versionen.Außerdem werden benutzerdefinierte Etiketten erstellt.JMP 15 verfügt über neue Funktionen von Textlet, Graphlet usw., die das Hinzufügen von benutzerdefiniertem Text erleichtern könnten. Das Skript ist beigefügt und das daraus erstellte Bild ist unten dargestellt.
Es gibt mehrere wichtige Funktionen, mit denen Sie tun können, was Sie wollen:
- So erhalten Sie die Anzahl der durch die X-Variable definierten Boxplots. Dieses Skript verwendet XPath, das eine Boxplot-Referenz bpseg[i] erstellt.
- wie man die JSL-Sendesyntax << anstelle von Dispatch verwendet
- For-Schleife.
Wenn Sie neu bei JSL sind, müssen Sie wahrscheinlich einige Funktionen im nachschlagen Hilfe > Skriptindex für XPath , GraphBuilderBox Und FrameBox.
Ich empfehle, das Skript wie unten beschrieben auszuführen:
- Markieren Sie die Zeilen 1 bis 50 und führen Sie sie aus.
- Lesen Sie die Zeilen 51 bis 54, markieren Sie sie und führen Sie sie aus. Sehen Sie sich die Änderungen an, die an allen Boxplots vorgenommen wurden
- Lesen, markieren und führen Sie die Zeilen 55 bis 59 aus, um zu sehen, wie Sie Boxplot für Boxplot Änderungen vornehmen können
Der Schlüsselcode lautet:
//assume you like March's style and do not want to show the points
//here is the code to set all
bpseg = gb << Xpath("//BoxPlotSeg");
bpseg << {Box Style( "Solid" ), Confidence Diamond( 1 ), Fences( 0 )};
//if you want to color each by month
for(i=1, i<=nitems(bpseg), i++,
bpseg[i] << Fill Color(Color Of(As Row State(cc[i])))
);
//if you want to remove points. since ponts are the 3rd element
report(gb)[GraphBuilderBox(1)] << remove element(1,1,3);
//to add them back, uncomment and run the next line
//report(gb)[GraphBuilderBox(1)] << Add Element(1, 1, {Type("Points"), X, Y});
Ich hoffe, das reicht für den Einstieg.Oh, Sie müssen die Dispatch-Anweisungen, die auf einzelne Boxplots abzielen, in Ihrem gespeicherten Skript entfernen.Das angehängte Skript enthielt drei Dispatch-Anweisungen nur zum Vergleich von Symatx- und Trainingszwecken.
