Esta es el arreglo más completa que encomtrarás aportar, pero estúdiala detenidamente y analiza si se adapta a tu proyecto.
Solución:
Editar:
La solución más fácil de conseguir hjust
/vjust
comportarse inteligentemente es añadir la group
estética a geom_text
y luego hjust
& position
ajustar para el group
automáticamente.
1. Orientación Vertical
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()
Esto da:
2. Orientación 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, group = week),
hjust = -0.5, size = 2,
position = position_dodge(width = 1),
inherit.aes = TRUE
) +
coord_flip() +
theme_bw()
Esto da:
Esta no es necesariamente la forma más general de hacerlo, pero puede tener una fill
dependiente hjust
(o vjust
, dependiendo de la orientación) variable. No me queda del todo claro cómo seleccionar el valor del parámetro de ajuste, y actualmente se basa en qué aspecto derecho. Quizás alguien más pueda sugerir una forma más general de elegir el valor de este parámetro.
1. Orientación Vertical
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()
Esto es lo que parece:
2. Orientación 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()
Esto es lo que parece:
Él position_dodge()
declaración toma un parámetro de ancho. Para asegurarse de que el texto esté centrado al final de las barras (es decir, el ancho de sobreexposición para las barras y el texto sea el mismo), asigne el mismo parámetro de ancho al position_dodge()
declaración dentro geom_bar
y dentro geom_text
.
También hay un parámetro de ancho para geom_bar
, ese es el ancho de las barras. Si desea que las barras se topen entre sí dentro de cada name
, haga que el ancho de la barra sea el mismo que el ancho de sobreexposición; si desea un pequeño espacio entre las barras, haga que el ancho de la barra sea un poco menor que el ancho de esquivar.
Si utiliza la estética global, no necesitará un group
estético (sin embargo, si usa solo estética local, necesitará una estética de grupo para geom_text
).
hjust = -0.5
colocará las etiquetas de texto justo más allá del final de las barras; hjust = 1.5
las coloca dentro del final de las barras.
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()
Sección de Reseñas y Valoraciones
Recuerda que tienes la capacidad de agregar una reseña si te fue de ayuda.