27.6 Profundizando en las capas
Observe cómo aplican las últimas capas presentadas en un diagrama de barras:
ggplot(data = saber %>% filter(!is.na(estu_genero))) +
aes(x = estu_genero, fill = estu_genero) +
geom_bar() +
scale_fill_manual(values = c("olivedrab", "lightgoldenrod"),
labels = c("Femenino", "Masculino")) +
labs(title = "Comparación según sexo",
x = "", y = "Frecuencia", fill = "Sexo") +
scale_x_discrete(labels = c("", ""))
Como la estética divide según un fill, se utiliza scale_fill_manual y hay una etiqueta (lab) para fill que se traduce en el título de la leyenda.
La leyenda presenta la distinción del sexo según el color. Ya no hace falta dar título al eje x ni especificar cada categoría de dicho eje. La primera se suprimió con x = "". La segunda con la capa scale_x_discrete(labels = c("", "")).
Se pueden definir capas previamente:
escala_personal <- list(scale_color_manual(values = c("#6B9923", "#EECCA2"),
guide = "none"),
scale_fill_manual(values = c("olivedrab", "lightgoldenrod"),
labels = c("Femenino", "Masculino")))
ggplot(data = saber %>% filter(!is.na(estu_genero))) +
aes(x = estu_genero, fill = estu_genero, col = estu_genero) +
geom_bar() +
escala_personal +
labs(x = "", y = "Frecuencia", fill = "Sexo") +
scale_x_discrete(labels = c("", ""))
En la visualización anterior hay muy pocas categorías, pero si hubiese muchas, lo ideal es diseñar una diagrama de barras horizontal. La capa de coordenadas resuelve eso fácilmente:
ggplot(data = saber %>% filter(!is.na(estu_genero))) +
aes(x = estu_genero, fill = estu_genero, col = estu_genero) +
geom_bar() +
escala_personal +
labs(x = "", y = "Frecuencia", fill = "Sexo",
title = "Distribución de los sexos en las pruebas SABER 11",
caption = "Fuente: ICFES 2019") +
scale_x_discrete(labels = c("Femenino", "Masculino")) +
coord_flip() +
guides(fill = "none")
Para un diagrama de barras horizontal no se recomienda el uso de leyenda. La capa guide hace referencia a la leyenda.
Pero hay otras opciones. Por ejemplo, no añadir la capa guide, sino añadir en geom_bar show.legend = FALSE. O añadir una capa global que anule las leyendas: theme(legend.position = "none")