Tengo una secuencia de comandos que genera diagramas de caja en Graph Builder, pero como se capturó por primera vez de un gráfico. Aquí está el código:
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)}
)
}
)
)
)
);Cerca de la parte inferior está el bloque FrameBox donde puede ver un DispatchSeg para cada diagrama de caja que se creó a partir del gráfico original. Lo que deseo hacer es hacer que esa sección del código sea dinámica, ya que la cantidad de sitios puede ser diferente para cada población de sitios.
Lo que necesito es una forma de capturar la cantidad de sitios únicos que no han sido excluidos y luego usar ese conteo para crear un bucle para establecer la línea y los colores de relleno para cada diagrama de caja. ¿Cómo puedo hacer esto?
@mdawson69 ,
El ejemplo podría tener "demasiada información"; se creó como un script de aprendizaje para personalizar GraphBuilder para JMP 13, pero funciona para versiones posteriores.También crea etiquetas personalizadas.JMP 15 tiene funciones de Textlet, Graphlet, etc. que pueden facilitar la adición de texto personalizado. El script se adjunta y la imagen que crea se muestra a continuación.
Hay varias características clave para hacer lo que quieras:
- cómo obtener el número de diagramas de caja definidos por la variable X. Este script usa XPath que crea una referencia de diagrama de caja bpseg[i]
- cómo usar la sintaxis de envío JSL << en lugar de Dispatch
- En bucle.
Si es nuevo en JSL, es probable que necesite buscar algunas características en el Ayuda > Índice de secuencias de comandos para XPath , GraphBuilderBox y FrameBox.
Recomiendo ejecutar el script como se describe a continuación:
- Resalte y ejecute las líneas 1 a 50.
- lea, resalte y ejecute las líneas 51 a 54, observe los cambios realizados en todos los diagramas de caja
- lea, resalte y ejecute las líneas 55 a 59 para ver cómo hacer cambios en un diagrama de caja a la vez
El código clave es:
//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});
Espero que esto sea suficiente para empezar.Oh, debe eliminar las declaraciones de envío que se dirigen a diagramas de caja individuales en su secuencia de comandos guardada.el script adjunto mantuvo tres declaraciones de envío solo para comparar symatx y fines de capacitación.
