¿Por qué ggplot solo está rellenando algunas de mis barras apiladas y no otras?
Estoy haciendo un gráfico de barras apiladas utilizando ggplot, pero por alguna razón, sigue dejando 2 barras sin llenar a pesar de llenar otras utilizando los mismos criterios. ¿Por qué está ocurriendo esto y cómo puedo evitar que suceda?
biblioteca(ggplot2)
biblioteca(dplyr)
biblioteca(scales)
Código para replicar:
“`
data <- tibble(team = factor(c(rep(“Equipo 1”, 10), rep(“Equipo 2”, 10), rep(“Equipo 3”, 10), rep(“Equipo 4”, 10)), levels = c(“Equipo 1”, “Equipo 2”, “Equipo 3”, “Equipo 4”)),
state = factor(c(rep(c(“Ganado”, “Empatado”,
“Repetido”, “Pospuesto”, “Forfeit”,
“Perdido”, “Retirado”, “En curso”,
“Indeterminado”, “Desconocido”), 4)), levels = c(“Ganado”, “Empatado”,
“Repetido”, “Pospuesto”, “Forfeit”,
“Perdido”, “Retirado”, “En curso”,
“Indeterminado”, “Desconocido”)),
count = c(1920, 80, 241, 5, 310, 99, 2, 127, 20, 33,
48, 1, 8, 0, 11, 3, 0, 4, 3, 3,
140, 5, 8, 0, 17, 2, 0, 5, 3, 7,
477, 20, 59, 1, 106, 1, 0, 33, 7, 10))
data <- data %>%
group_by(team) %>%
mutate(percentage = round((count/sum(count, na.rm = TRUE)), 2))
data %>%
ggplot(aes(fill= state, y = percentage, x = team)) +
geom_col(position=”stack”, width = 0.4) +
coord_flip() +
scale_y_continuous(labels = scales::percent_format(accuracy = 1), limits = c(0, 1)) +
geom_text(aes(label = scales::percent(percentage, accuracy = 1)),
position = position_stack(vjust = .5),
check_overlap = TRUE )
~~~~~
Aquí tienes cómo se ve; el 75% flotante y el 59% para el Equipo 3 y el Equipo 2, respectivamente, deberían estar en el color salmón que se utiliza para los Equipos 4 y 1. Sé que no es un error tipográfico porque estoy utilizando el mismo título para cada uno.
davy.ai
La razón por la que las barras del 75% y 59% para el Equipo 3 y el Equipo 2, respectivamente, no se están llenando en el gráfico de barras apiladas se debe a que no hay filas en los “datos” para esos equipos con un “estado” de “Pospuesto” o “Retirado”, que son las dos categorías que faltan en esas barras. Por lo tanto, no hay nada para llenar esas barras.
Para evitar que esto suceda, asegúrese de que cada “equipo” tenga al menos una fila con cada valor posible de “estado”, incluso si el recuento es cero. Puede hacer esto creando un nuevo conjunto de datos con todas las combinaciones posibles de “equipo” y “estado” y fusionándolo con sus “datos” usando “left_join”.
Aquí tienes un ejemplo de implementación:
Esto debería crear un gráfico de barras apiladas con todas las barras llenas, incluso si no hay recuentos para ciertas categorías.