Je voudrais ajuster le texte sur le barplot.
J'ai essayé d'ajuster hjust/vjust pour afficher comme je l'aime mais il semble que cela ne fonctionne pas correctement.
ggplot(data) +
geom_bar(aes(name, count,
fill = week), stat='identity', position = 'dodge') +
geom_text(aes(name,count,
label=count),hjust=0.5, vjust=3, size=2,
position = position_dodge(width = 1)) +
coord_flip()
Je voudrais donc que les chiffres soient situés sur chaque barre, au centre, à droite, de manière à ce que ce soit lisible sans se chevaucher comme dans les dernières parties.
La solution la plus simple pour que hjust
/vjust
se comporte intelligemment consiste à ajouter l’esthétique group
à geom_text
puis hjust
& position
s’ajuste automatiquement pour le group
.
ggplot(data) +
geom_bar(
aes(x = name, y = count, fill = week, group = week),
stat='identity', position = 'dodge'
) +
geom_text(
aes(x = name, y = count, label = count, group = week),
position = position_dodge(width = 1),
vjust = -0.5, size = 2
) +
theme_bw()
Cela donne:
ggplot(data) +
geom_bar(
aes(x = name, y = count, fill = week, group = week),
stat='identity', position = 'dodge'
) +
geom_text(
aes(x = name, y = count, label = count, group = week),
hjust = -0.5, size = 2,
position = position_dodge(width = 1),
inherit.aes = TRUE
) +
coord_flip() +
theme_bw()
Cela donne:
Ce n'est pas nécessairement la manière la plus générale de procéder, mais vous pouvez avoir une variable fill
dépendante hjust
(ou vjust
, selon l'orientation). Je ne sais pas tout à fait comment sélectionner la valeur du paramètre d’ajustement, et c’est actuellement basé sur l’aspect correct . Peut-être que quelqu'un d'autre peut suggérer un moyen plus général de choisir cette valeur de paramètre.
library(dplyr)
library(ggplot2)
# generate some data
data = data_frame(
week = as.factor(rep(c(1, 2), times = 5)),
name = as.factor(rep(LETTERS[1:5], times = 2)),
count = rpois(n = 10, lambda = 20),
hjust = if_else(week == 1, 5, -5),
vjust = if_else(week == 1, 3.5, -3.5)
)
# Horizontal
ggplot(data) +
geom_bar(
aes(x = name, y = count, fill = week, group = week),
stat='identity', position = 'dodge'
) +
geom_text(
aes(x = name, y = count, label = count, vjust = vjust),
hjust = -0.5, size = 2,
inherit.aes = TRUE
) +
coord_flip() +
theme_bw()
Voici à quoi ça ressemble:
ggplot(data) +
geom_bar(
aes(x = name, y = count, fill = week, group = week),
stat='identity', position = 'dodge'
) +
geom_text(
aes(x = name, y = count, label = count, vjust = vjust),
hjust = -0.5, size = 2,
inherit.aes = TRUE
) +
coord_flip() +
theme_bw()
Voici à quoi ça ressemble:
L'instruction position_dodge()
prend un paramètre width. Pour vous assurer que le texte est centré à la fin des barres (c’est-à-dire que la largeur d’esquive des barres et le texte doivent être identiques), attribuez le même paramètre width à l’instruction position_dodge()
dans geom_bar
et dans geom_text
.
Il existe également un paramètre width pour geom_bar
, c'est la largeur des barres. Si vous voulez que les barres se touchent dans chaque name
, faites en sorte que la largeur de la barre soit la même que la largeur d'évitement; si vous voulez un petit espace entre les barres, réglez la largeur de la barre un peu moins que la largeur en évitant.
Si vous utilisez une esthétique globale, vous n’aurez pas besoin d’une esthétique group
(toutefois, si vous utilisez uniquement une esthétique locale, vous aurez besoin d’une esthétique de groupe pour geom_text
).
hjust = -0.5
positionnera les étiquettes de texte juste au-delà de la fin des barres; hjust = 1.5
les place à l'intérieur des barres.
library(ggplot2)
# Generate some data - using @tchakravarty's data - Thanks.
df = data.frame(
week = as.factor(rep(c(1, 2), times = 5)),
name = as.factor(rep(LETTERS[1:5], times = 2)),
count = rpois(n = 10, lambda = 20))
position = position_dodge(width = .75)
width = .75
ggplot(df, aes(x = name, y = count, label = count, fill = week)) +
geom_bar(width = width, stat='identity', position = position) +
geom_text(hjust = -0.5, size = 2, position = position) +
coord_flip() +
theme_bw()
# To separate the bars slightly:
position = position_dodge(width = .75)
width = .65
ggplot(df, aes(x = name, y = count, label = count, fill = week)) +
geom_bar(width = width, stat='identity', position = position) +
geom_text(hjust = -0.5, size = 2, position = position) +
coord_flip() +
theme_bw()