Comment augmenter l’espace entre les barres dans une barre de terrain dans ggplot2?

Comment puis-je augmenter l’espace entre les barres d’un graphique en barres dans ggplot2 ?

Vous pouvez toujours jouer avec le paramètre width , comme indiqué ci-dessous:

 df <- data.frame(x=factor(LETTERS[1:4]), y=sample(1:100, 4)) library(ggplot2) ggplot(data=df, aes(x=x, y=y, width=.5)) + geom_bar(stat="identity", position="identity") + opts(title="width = .5") + labs(x="", y="") + theme_bw() 

Comparez avec les autres parameters suivants pour la width :

texte alt

Jusqu'ici tout va bien. Maintenant, supposons que nous ayons deux facteurs. Si vous souhaitez jouer avec des barres juxtaposées à barplot() (comme lorsque vous utilisez space avec barplot() beside=TRUE dans barplot() ), vous ne geom_bar(position="dodge") pas facilement utiliser geom_bar(position="dodge") : vous pouvez changer la largeur de la barre, mais pas append de l'espace entre les barres adjacentes (et je n'ai pas trouvé de solution pratique sur Google). J'ai fini avec quelque chose comme ça:

 df <- data.frame(g=gl(2, 1, labels=letters[1:2]), y=sample(1:100, 4)) x.seq <- c(1,2,4,5) ggplot(data=transform(df, x=x.seq), aes(x=x, y=y, width=.85)) + geom_bar(stat="identity", aes(fill=g)) + labs(x="", y="") + scale_x_discrete(breaks = NA) + geom_text(aes(x=c(sum(x.seq[1:2])/2, sum(x.seq[3:4])/2), y=0, label=c("X","Y")), vjust=1.2, size=8) 

Le vecteur utilisé pour l'axis $ x $ est "injecté" dans le data.frame, de sorte que vous modifiez l'espacement externe si vous le souhaitez, alors que la width permet de contrôler l'espacement interne. Les étiquettes pour $ x $ -axis pourraient être améliorées en utilisant scale_x_discrete() .

texte alt

Pour l’espace entre les barres de facteurs, utilisez

 ggplot(data = d, aes(x=X, y=Y, fill=F)) + geom_bar(width = 0.8, position = position_dodge(width = 0.9)) 

La largeur dans geom_bar contrôle la largeur de la barre par rapport à l’axe des x, tandis que la largeur dans position_dodge contrôle la largeur de l’espace donné aux deux barres également par rapport à l’axe des x. Jouez avec la largeur pour en trouver une qui vous plait.

Merci beaucoup chl. J’ai eu le même problème et vous m’avez aidé à le résoudre. Au lieu d’utiliser geom_text pour append les X-labels, j’ai utilisé scale_x_continuous (voir ci-dessous)

 geom_text(aes(x=c(sum(x.seq[1:2])/2, sum(x.seq[3:4])/2), y=0, label=c("X","Y")), vjust=1.2, size=8) 

remplacé par

 scale_x_continuous(breaks=c(mean(x.seq[1:2]), mean(x.seq[3:4])), labels=c("X", "Y")) 

Pour l’espace entre les barres POSIXlt, vous devez ajuster la largeur à partir du nombre de secondes par jour

 # POSIXlt example: full & half width d <- data.frame(dates = strptime(paste(2016, "01", 1:10, sep = "-"), "%Y-%m-%d"), values = 1:10) ggplot(d, aes(dates, values)) + geom_bar(stat = "identity", width = 60*60*24) ggplot(d, aes(dates, values)) + geom_bar(stat = "identity", width = 60*60*24*0.5)