Ho uno script che genera boxplot in Graph Builder, ma poiché è stato catturato per la prima volta da un grafico. Ecco il codice:
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)}
)
}
)
)
)
);Nella parte inferiore è presente il blocco FrameBox in cui è possibile visualizzare un DispatchSeg per ogni boxplot creato dal grafico originale. Quello che desidero fare è rendere dinamica quella sezione del codice, poiché il numero di siti può essere diverso per ogni popolazione del sito.
Ciò di cui ho bisogno è un modo per acquisire il numero di siti univoci che non sono stati esclusi e quindi utilizzare quel conteggio per creare un ciclo per impostare la linea e riempire i colori per ogni boxplot. Come posso procedere?
@mdawson69 ,
L'esempio potrebbe contenere "troppe informazioni" è stato creato come script di apprendimento per personalizzare GraphBuilder per JMP 13 ma funziona per le versioni successive.Inoltre crea etichette personalizzate.JMP 15 dispone di nuove funzionalità di Textlet, Graphlet, ecc. che potrebbero semplificare l'aggiunta di testo personalizzato. Lo script è allegato e l'immagine che crea è mostrata di seguito.
Ci sono diverse funzionalità chiave per fare quello che vuoi:
- come ottenere il numero di boxplot definiti dalla variabile X. Questo script utilizza XPath che crea un riferimento al boxplot bpseg[i]
- come utilizzare la sintassi di invio JSL << invece di Dispatch
- Per ciclo.
Se non conosci JSL, probabilmente dovrai cercare alcune funzionalità nel file Guida > Indice script per XPat , GraphBuilderBox E FrameBox.
Consiglio di eseguire lo script come descritto di seguito:
- evidenziare e scorrere le righe da 1 a 50.
- leggi, evidenzia ed esegui le righe da 51 a 54, osserva le modifiche apportate a tutti i boxplot
- leggere, evidenziare ed eseguire le righe da 55 a 59 per vedere come apportare modifiche un boxplot alla volta
Il codice chiave è:
//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});
Spero che questo sia sufficiente per iniziare.Oh, devi rimuovere le istruzioni Dispatch che prendono di mira i singoli boxplot nel tuo script salvato.lo script allegato ha mantenuto tre istruzioni di invio solo per confrontare symatx e scopi di formazione.
