Comment ajouter/personnaliser une bordure (contour) aux graphiques à barresBonjour à la communauté JMP,
Je souhaite ajouter un contour à chaque barre d'un graphique à barres et personnaliser sa largeur. Comment puis-je faire cela dans JMP ?
Comme le montre l'image ci-dessous, je souhaite ajouter une bordure ou un contour autour de chaque barre.

J'ai entendu parler d'une solution de contournement qui consiste à superposer deux graphiques à barres pour simuler un contour. Cependant, cette méthode ne semble pas permettre de personnaliser l'épaisseur du contour.
Existe-t-il un moyen, soit via l'interface de Graph Builder, soit en modifiant un script, d'appliquer un contour à chaque barre et de modifier indépendamment sa couleur et sa largeur ?
J'utilise actuellement JMP Student Edition 19.
Merci d'avance pour votre aide !
Analyse et modélisation de données de baseExploration et visualisation des donnéesRe: Comment ajouter/personnaliser une bordure (contour) aux graphiques à barresJe pense qu'utiliser un deuxième graphique à barres serait une solution acceptable, mais cela demandera un peu de travail car il faudra créer une colonne supplémentaire pour obtenir les hauteurs correctes, puis modifier les proportions de largeur. Cela a déjà été fait avec cette méthode.

Voici un exemple de script que vous pouvez exécuter et explorer ensuite comment le graphique a été construit (l'ordre des histogrammes a été modifié, la proportion de largeur est modifiée, la couleur est changée, etc.)
Voir plus...
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]})}
)
)
);
Re: Comment ajouter/personnaliser une bordure (contour) aux graphiques à barres@jthi a trouvé une bonne solution. J'ai tendance à utiliser les primitives graphiques JMP qui permettent de dessiner directement des lignes et des rectangles, avec la possibilité de les colorer et d'en définir l'épaisseur.
Consultez la section « Ajouter un script graphique » dans l’index des scripts et le guide des scripts pour obtenir de la documentation et des exemples sur la façon de procéder.
Re: Comment ajouter/personnaliser une bordure (contour) aux graphiques à barresD'autres (bonnes) options seraient :
- Utilisation de Graphic Script. Il faut connaître le nombre de barres, et je pense que cette information n'est pas disponible dans l'objet BarSeg. Il est donc plus simple d'ajouter un marqueur au graphique (qui peut être masqué sur le tracé final).
- Utiliser l'expression de dessin de marqueur. Cela nécessite l'ajout d'un marqueur, est plus difficile à mettre en œuvre, mais est probablement l'option la plus robuste.
Je n'ai pas le temps de détailler ces options maintenant, mais elles existent bel et bien.
Re: Comment ajouter/personnaliser une bordure (contour) aux graphiques à barresJ'ai eu le temps de créer le script graphique
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);
);
));

Et voici 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);
)
);

Re: Comment ajouter/personnaliser une bordure (contour) aux graphiques à barres@jthi ,
L'exemple « Dessiner un marqueur » ne fonctionne pas correctement dans mon installation de JMP 19. La transparence du marqueur semble être par défaut réglée sur 0. La simple modification ci-dessous permet d'afficher correctement le rectangle.
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);
)
);
Re: Comment ajouter/personnaliser une bordure (contour) aux graphiques à barresSi une fine ligne vous convient comme bordure, c'est très simple : il suffit d'ajouter un deuxième graphique à barres avec pattern = « none » et d'ajuster la couleur, par exemple en noir.

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 )
)
)}
)
)
);
Re: Comment ajouter/personnaliser une bordure (contour) aux graphiques à barres@txnelson
Merci beaucoup pour vos réponses détaillées. Elles m'ont été très utiles. Mais j'aimerais faire une dernière chose.
Lorsque j'utilise Set Marker Draw Expr pour dessiner une bordure de barre, celle-ci est dessinée sur le calque supérieur.
Par conséquent, lorsque j'ajoute des barres d'erreur ou des points de données individuels (via un graphique à points), la bordure personnalisée est dessinée par-dessus.
Existe-t-il un moyen de contrôler l'ordre de dessin (calque) de la bordure afin qu'elle apparaisse derrière les points de données ?
Pour la création de graphiques hautement personnalisés, utilise-t-on généralement des langages de script comme R, ou des logiciels dédiés tels que GraphPad Prism ?
Re: Comment ajouter/personnaliser une bordure (contour) aux graphiques à barresvous pouvez ajuster l'ordre de chaque élément :
Faites un clic droit dans le graphique et modifiez l'ordre :

S'il n'y a qu'un seul type de parcelle, ajoutez-en 20 et personnalisez-les.
Graph Builder est bien plus flexible et puissant qu'on ne le pense au premier abord. Voici le secret :
une transition en douceur entre un glisser-déposer très simple et des graphiques hautement personnalisés.
Avec Set Marker Draw Expr, vous bénéficiez déjà d'une fonctionnalité très élaborée, mais il y en a bien d'autres.
Inutile d'utiliser un autre outil de traçage.
Re: Comment ajouter/personnaliser une bordure (contour) aux graphiques à barresDessinez votre graphique avec les nouvelles bordures et les barres d'erreur. Faites un clic droit sur le graphique et sélectionnez « Personnalisé ». Une boîte de dialogue s'affiche ; vous pouvez alors sélectionner les barres d'erreur et les placer au premier plan. Fermez la boîte de dialogue, puis cliquez sur le triangle rouge et sélectionnez « Enregistrer le script ». Vous pouvez ensuite examiner le script généré ; vous y trouverez les instructions JSL pour placer les barres d'erreur au premier plan.