web-dev-qa-db-fra.com

Comment afficher toutes les étiquettes x dans barplot R?

C'est une question de base mais je ne trouve pas de réponse. Je génère environ 9 barplots dans un panneau et chaque barplot a environ 12 bars. Je fournis les 12 étiquettes dans mon entrée, mais R ne nomme que des barres alternatives. Cela est évidemment dû à un paramètre par défaut dans R qui doit être modifié, mais je ne le trouve pas.

28
user2760

Vous pourrez peut-être faire apparaître toutes les étiquettes si vous utilisez las=2 Dans l'appel plot(). Sinon, vous devrez utiliser xaxt="n", Puis mettre les étiquettes avec un appel distinct à axis(1, at= ..., labels=...).

Une autre méthode consiste à collecter d'abord les points médians, puis à utiliser text () avec xpd et srt 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 dans la zone tracée.

29
42-

Pour obtenir des étiquettes pivotées sur un barplot de base R, vous pouvez (comme je le fais ici) adapter l'un des exemples donnés dans la vignette du paquet gridBase:

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

17
Josh O'Brien

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

Je 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.

Exemples de données pour le tracé

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 tracé avec des étiquettes trop grandes

barplot(sample_curve) # labels too big for the plot

labels too big

Exemple de tracé 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

2
FistOfFury