39 votes

Comment afficher toutes les étiquettes x dans un barplot R ?

Il s'agit d'une question élémentaire mais je ne parviens pas à trouver de réponse. Je génère environ 9 graphiques à barres dans un panneau et chaque graphique à barres comporte environ 12 barres. Je fournis les 12 étiquettes dans mon entrée mais R ne nomme que les barres alternées. Cela est évidemment dû à un paramètre par défaut de R qui doit être modifié, mais je ne parviens pas à le trouver.

34voto

BondedDust Points 105234

Vous pourrez peut-être faire apparaître toutes les étiquettes si vous utilisez la fonction las=2 à l'intérieur de la plot() appeler. Cet argument et les autres mentionnés ci-dessous sont décrits dans le document ?par qui définit les paramètres graphiques pour les dispositifs de traçage. Cela fait pivoter le texte de 90 degrés. Sinon, vous devrez utiliser xaxt="n" (pour supprimer les tics et les étiquettes) et ensuite mettre les étiquettes avec un appel séparé à axis(1, at= <some numerical vector>, labels=<some character vector>) .

#  midpts <- barplot( ... ) # assign result to named object
axis(1, at = midpts, labels=names(DD), cex.axis=0.7) # shrinks axis labels

Une autre méthode consiste à collecter d'abord les points médians et à utiliser ensuite text() con xpd =TRUE pour permettre au texte d'apparaître en dehors de la zone de tracé et srt être un angle pour la rotation du texte comme arguments nommés pour contrôler le degré de rotation du texte :

text(x=midpts, y=-2, names(DD), cex=0.8, srt=45, xpd=TRUE)

La valeur y doit être choisie en utilisant les coordonnées de la zone tracée.

Copie d'un commentaire utile : Pour les futurs lecteurs qui ne savent pas ce que font ces arguments : las=2 fait tourner les étiquettes de 90 degrés dans le sens inverse des aiguilles d'une montre. De plus, si vous avez besoin de réduire la police, vous pouvez utiliser cex.names=.5 pour réduire la taille de la police.

18voto

Josh O'Brien Points 68397

Pour obtenir des étiquettes tournées sur un graphique à barres R de base, vous pouvez (comme je le fais ici) adapter l'une des fonctions de l'outil exemples donnés dans la vignette du gridBase paquet :

library(grid)
library(gridBase)

## Make some data with names long enough that barplot won't print them all
DD <- table(rpois(100, lambda=5))
names(DD) <- paste("long", names(DD), sep="_")

## Plot, but suppress the labels
midpts <- barplot(DD, col=rainbow(20), names.arg="")

## Use grid to add the labels    
vps <- baseViewports()
pushViewport(vps$inner, vps$figure, vps$plot)

grid.text(names(DD),
    x = unit(midpts, "native"), y=unit(-1, "lines"),
    just="right", rot=50)

popViewport(3)

enter image description here

9voto

FistOfFury Points 630

R n'étiquettera pas chaque barre si les étiquettes sont trop grandes.

Je vous suggère d'essayer de faire pivoter les étiquettes verticalement en passant l'argument las=2 à votre fonction de traçage.

Si les étiquettes sont toujours trop grandes, vous pouvez essayer de réduire la police en utilisant l'argument cex.names=.5.

Exemple de données pour la parcelle

sample_curve <- c(2.31,2.34,2.37,2.52,2.69,2.81,2.83,2.85,2.94, 3.03,  3.21,  3.33)   # create a sample curve
names(sample_curve)<-c("1 MO","2 MO","3 MO","6 MO","1 YR","2 YR","3 YR","5 YR","7 YR","10 YR","20 YR","30 YR") # label the curve

Exemple de graphique avec des étiquettes trop grandes

barplot(sample_curve) # labels too big for the plot

labels too big

Exemple de graphique avec des étiquettes tournées et petites

barplot(sample_curve, las=2, cex.names=.5) # lables are rotated and smaller, so they fit

rotated and smaller

0voto

Wael Points 39

Avant de tracer le barplot()

Vous pouvez simplement augmenter les marges avec par() et vos valeurs de marges (votre parcelle a 4 marges) mar = c(v1,v2,v3,V4)

par(mar=c(10,4,4,4))

par exemple :

par(mar=c(10,4,4,4))
barplot(height=c(1,5,8,19,7),
        names.arg=c("very long label 1","very long label 2",
                    "very long label 3","very long label 4",
                    "very long label 5"), las=2 )

Very long labels Barplot

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X