Décalage d'étiquette de graphique à barres du générateur de graphiquesLe générateur de graphiques peut afficher des étiquettes de valeur sur des graphiques à barres. Malheureusement, si les données sont également tracées sur le graphique à barres, les étiquettes sont complètement masquées.

Heureusement, il est relativement simple de repositionner manuellement les étiquettes. Obtenir un alignement correct est un peu délicat, et le faire plus d'une fois est relativement frustrant. Même la modification du script graphique pour obtenir des alignements corrects est fastidieuse après la deuxième ou la troisième itération d'un graphique. Avec un peu de magie JSL, nous pouvons trouver les cadres et les segments de barres et ajuster automatiquement les décalages d'étiquettes.
Dans le script ci-dessous, un exemple de table de données est ouvert, puis un script graphique est exécuté, suivi de quelques instructions de formatage.
Pour utiliser ce script, remplacez la référence de votre table de données ou décommentez le "dt=current data table();" ligne pour laisser le script s'exécuter sur la table actuelle. Le script de création de graphique est un exemple, vous utilisez RTM>Enregistrer le script> dans le Presse-papiers pour obtenir votre script de création de graphique, puis le collez à la place de l'exemple.
names default to here(1);
//paste your data table reference here, or just use the current data table.
dt=Open( "$SAMPLE_DATA/Big Class.jmp" );
//dt=current data table();
obj=dt<<
//Paste your graph builder script here
Graph Builder(
Size( 518, 470 ),
Show Control Panel( 0 ),
Variables( X( :age ), Y( :height ) ),
Elements(
Bar(X,Y,Legend( 4 ),
Error Interval( "Standard Error" ),
Label( "Label by Value" )),
Points( X, Y, Legend( 5 ) )),
SendToReport(
Dispatch( {}, "400", ScaleBox,
{Legend Model(4,
Properties(0,{Fill Color( 0 ), Fill Pattern( "none" )},Item ID( "Mean", 1 )))}))
);
// End of graph builder script.
//Make a reference for the bar chart segments
fbi= N Items( (obj << xpath( "//FrameBox" )) );
for (ii=1, ii<=fbi, ii++,
frame = Report( obj )[FrameBox( ii )];
seg = (frame << Find Seg( "Bar Seg" ));
//Get variable used for the X axis
vars=obj<< Get Variables();
xx=vars[1];xx[1];
//Find the number of bars (or levels used to make bars)
Summarize( levels = By( eval(xx[1])));
Eval List( levels );
//Build an expression to change the offset
qq=expr(set label offset());
for (i=0, i<=nitems(levels)*fbi, i++, //Note there is a multipler, *fbi. This assumes each level is the same for each frame. Its kind of sloppy, might need to just replace it with a fixed value.
rr={};
insert into (rr, i); //This is the Bar number, starts with zero
insert into (rr,i); //This is the x offset, which is the same as the bar number
insert into(rr, 10); //This is the Y offset
insert into (qq, (rr));
);
//Make magic happen
eval(substitute(expr(seg<<QQ></QQ>
<P> </P>
<P>Dans un article de blog précédent, j'ai décrit les étapes et inclus un script d'automatisation pour ajouter des barres d'erreur avec des annotations aux tracés "Dynamite", des graphiques à barres avec une ligne d'intervalle. <A href="https://community.jmp.com/t5/Byron-Wingerd-s-Blog/One-Way-ANOVA-Figure-for-Scientists/ba-p/265156" target="_blank">https://community.jmp.com/t5/Byron-Wingerd-s-Blog/One-Way-ANOVA-Figure-for-Scientists/ba-p/265156</A></P><LINGO-TEASER id="lingo-teaser-777858" slang="en-US" mode="UPDATE"><P>Vos données masquent-elles vos étiquettes de données ?</P></LINGO-TEASER><LINGO-LABS id="lingo-labs-777858" slang="en-US" mode="UPDATE"><LINGO-LABEL>Automatisation et scripts</LINGO-LABEL><LINGO-LABEL>Analyse et modélisation des données de base</LINGO-LABEL><LINGO-LABEL>Exploration et visualisation des données</LINGO-LABEL><LINGO-LABEL>Partager et communiquer les résultats</LINGO-LABEL></LINGO-LABS>Re: Correction de l'étiquette du graphique à barres du générateur de graphiquesSalut @Byron_JMP , belle astuce. très utile.
alternativement, on pourrait ajouter les étiquettes à un deuxième élément de graphique à barres :
dt=Open( "$SAMPLE_DATA/Big Class.jmp" );
Graph Builder(
Size( 563, 522 ),
Summary Statistic( "Median" ),
Graph Spacing( 4 ),
Variables( X( :age ), Y( :height ) ),
Elements(
Bar( X, Y, Legend( 4 ), Error Interval( "Standard Error" ) ),
Points( X, Y, Legend( 5 ) ),
Bar( X, Y, Legend( 6 ), Bar Style( "Float" ), Label( "Label by Value" ) )
)
);
J'ai souvent un problème connexe : pas d'espace pour les étiquettes horizontales :

Existe-t-il une solution de contournement via JSL pour faire pivoter les étiquettes ?
Re : Correction de l'étiquette du graphique à barres du générateur de graphiquesIl semble que vous aimeriez faire pivoter les étiquettes comme ceci :

Je n'aurais pas essayé sans votre question. Il existe un JSL obscur qui vous permet de définir les propriétés de la police ET l'angle. Honnêtement, je n’ai jamais vu cela auparavant, et ça a l’air plutôt fantastique.
Le JSL est le suivant : Set Font( "" , 18 , "" , 90 ). La police est "", la taille est de 18 points, le formatage est "" et l'angle est de 90. Dans l'index de script, l'exemple a la police spécifiée et le formatage spécifié, mais les remplacer par "", semble utiliser le défaut. Changer l'angle à -90 fait lire le texte de bas en haut.
names default to here(1);
//paste your data table reference here, or just use the current data table.
dt=Open( "$SAMPLE_DATA/Big Class.jmp" );
//dt=current data table();
obj=dt<<
//Paste your graph builder script here
Graph Builder(
Size( 518, 470 ),
Show Control Panel( 0 ),
Variables( X( :age ), Y( :height ) ),
Elements(
Bar(X,Y,Legend( 4 ),
Error Interval( "Standard Error" ),
Label( "Label by Value" )),
Points( X, Y, Legend( 5 ) )),
SendToReport(
Dispatch( {}, "400", ScaleBox,
{Legend Model(4,
Properties(0,{Fill Color( 0 ), Fill Pattern( "none" )},Item ID( "Mean", 1 )))}),
Dispatch( {}, "Graph Builder", FrameBox,
{DispatchSeg(
BarSeg( 1 ),
Set Font( "", 18, "", 90 )
)}
)
)
);
// End of graph builder script.
//Make a reference for the bar chart segments
fbi= N Items( (obj << xpath( "//FrameBox" )) );
for (ii=1, ii<=fbi, ii++,
frame = Report( obj )[FrameBox( ii )];
seg = (frame << Find Seg( "Bar Seg" ));
//Get variable used for the X axis
vars=obj<< Get Variables();
xx=vars[1];xx[1];
//Find the number of bars (or levels used to make bars)
Summarize( levels = By( eval(xx[1])));
Eval List( levels );
//Build an expression to change the offset
qq=expr(set label offset());
for (i=0, i<=nitems(levels)*fbi, i++, //Note there is a multipler, *fbi. This assumes each level is the same for each frame. Its kind of sloppy, might need to just replace it with a fixed value.
rr={};
insert into (rr, i); //This is the Bar number, starts with zero
insert into (rr,i); //This is the x offset, which is the same as the bar number
insert into(rr, 10); //This is the Y offset
insert into (qq, (rr));
);
//Make magic happen
eval(substitute(expr(seg<<QQ></QQ>
<P> </P>Re : Décalage d'étiquette de graphique à barres du générateur de graphiquescool! incroyable!
merci.
Re : Décalage d'étiquette de graphique à barres du générateur de graphiquesHum...
Je me demandais simplement comment j'avais réussi à éloigner les étiquettes du haut du graphique... sans aucun JSL.
-> Ah : JMP17 !
Donc, comme autre solution de contournement pour " Décalage d'étiquette de graphique à barres " :
revenez à JMP 17 et à l'âge de l'utilisateur sur l'axe des x et en superposition :
// JMP 17!
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << new column("one", set each value(1));
dt << Graph Builder(
Variables( X( :age ), Y( :height ), Overlay( :age ), Color( :one ) ),
Elements(
Bar(
X,
Y,
Legend( 1 ),
Summary Statistic( "Mean" ),
Error Interval( "Standard Error" ),
Label( "Label by Value" )
),
Points( X, Y, Overlay( 0 ), Legend( 2 ) )
),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
1,
Properties(
0,
{Fill Color( 0 ), Fill Pattern( "none" )},
Item ID( "1", 1 )
)
), Legend Model(
2,
Properties( 0, {Line Color( 0 )}, Item ID( "1", 1 ) )
)}
)
)
);

désavantages:
- il semble y avoir un bug avec les barres d'erreur qui a été corrigé avec JMP18.
- aucune des autres fonctionnalités intéressantes de JMP 18.
Re : Décalage d'étiquette de graphique à barres du générateur de graphiquesJe pense à tous les utilisateurs JMP sans expérience JSL...
En fait, il devrait y avoir un contrôle pour le placement des étiquettes directement dans l'interface graphique.
Ah, il y a un souhait de 2020 de @shampton82 avec cette idée :
Contrôle d'étiquette de données de graphique à barres du générateur de graphiques
Re : Décalage d'étiquette de graphique à barres du générateur de graphiquesaccepter.
Re : Décalage d'étiquette de graphique à barres du générateur de graphiquesJe viens de découvrir quelle est la différence entre JMP 17 et JMP18 :
on obtient l'étiquette centrée dans JMP18 lors du passage en mode Empilé .
Malheureusement, ce mode n'est pas compatible avec les barres d'erreurs.
Il faut donc ajouter les barres d’erreur avec un autre graphique à barres flottantes.
Au total:

100 % d'interface graphique - 0 % de script.
voici le scénario :
Voir plus...Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Graph Builder(
Size( 521, 429 ),
Variables( X( :age ), Y( :height ) ),
Elements(
Points( X, Y, Legend( 2 ) ),
Bar(
X,
Y,
Bar Style( "Stacked" ),
Summary Statistic( "Mean" ),
Label( "Label by Value" )
),
Bar(
X,
Y,
Bar Style( "Float" ),
Summary Statistic( "Mean" ),
Error Interval( "Standard Error" )
)
)
);
... J'espère que ce message ne sera pas utilisé pour plaider contre la nouvelle fonctionnalité permettant de spécifier la position de l'étiquette .
Re: Décalage des étiquettes des graphiques à barres du générateur de graphiquesMerci pour ces messages. Cela me sera utile.
Re: Décalage des étiquettes des graphiques à barres du générateur de graphiquesUn tracé de carte thermique dispose-t-il également d'un « segment » avec lequel communiquer ?
pas dans cette liste:

s'appelle-t-il Heatmap Cells Seg ?
myseg << get description = "Heatmap Cells";
-> non.
Re: Décalage des étiquettes des graphiques à barres du générateur de graphiquesRectSeg.
Malheureusement, Heatmap Seg = Rect Seg est assez sourd 