J'ai un script qui génère des boxplots dans Graph Builder, mais tel qu'il a été capturé pour la première fois à partir d'un graphique. Voici le 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)}
)
}
)
)
)
);Près du bas se trouve le bloc FrameBox où vous pouvez voir un DispatchSeg pour chaque boîte à moustaches créée à partir du graphique d'origine. Ce que je souhaite faire, c'est rendre cette section du code dynamique, car le nombre de sites peut être différent pour chaque population de sites.
Ce dont j'ai besoin, c'est d'un moyen de capturer le nombre de sites uniques qui n'ont pas été exclus, puis d'utiliser ce nombre pour créer une boucle permettant de définir la ligne et les couleurs de remplissage de chaque boîte à moustaches. Comment puis-je procéder.
@mdawson69 ,
L'exemple peut contenir « trop d'informations ». Il a été créé en tant que script d'apprentissage pour personnaliser GraphBuilder pour JMP 13 mais fonctionne pour les versions ultérieures.Il crée également des étiquettes personnalisées.JMP 15 possède de nouvelles fonctionnalités de Textlet, Graphlet, etc. qui pourraient faciliter l'ajout de texte personnalisé. Le script est joint et l'image qu'il crée est présentée ci-dessous.
Il existe plusieurs fonctionnalités clés pour faire ce que vous voulez :
- comment obtenir le nombre de boxplots défini par la variable X. Ce script utilise XPath qui crée une référence boxplot bpseg[i]
- comment utiliser la syntaxe d'envoi JSL << au lieu de Dispatch
- Pour la boucle.
Si vous débutez avec JSL, vous devrez probablement rechercher certaines fonctionnalités dans le Aide > Index des scripts pour XPath , GraphBuilderBox et FrameBox.
Je recommande d'exécuter le script comme décrit ci-dessous :
- surlignez et exécutez les lignes 1 à 50.
- lisez, surlignez et exécutez les lignes 51 à 54, regardez les modifications apportées à toutes les boîtes à moustaches
- lisez, surlignez et exécutez les lignes 55 à 59 pour voir comment apporter des modifications, une boîte à moustaches à la fois
Le code clé est :
//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});
J'espère que cela suffira pour vous aider à démarrer.Oh, vous devez supprimer les instructions Dispatch ciblant des boîtes à moustaches individuelles dans votre script enregistré.le script ci-joint a conservé trois instructions de répartition uniquement à des fins de comparaison de symatx et de formation.
