El siguiente conjunto de datos contiene las respuestas (Si, No o N/A) de una encuesta. Estos datos serán transformados y usados en los ejemplos de este tutorial.
set.seed(11022021)
# Variables
res <- sample(c("Si", "No", "N/A"),
size = 100, replace = TRUE,
prob = c(0.4, 0.35, 0.25))
gen <- sample(c("Hombre", "Mujer"),
size = 100, replace = TRUE)
# Cambiamos los niveles de la variable para
# que "Si" aparezca primero en la leyenda
res <- factor(res, levels = c("Si", "No", "N/A"))
# Data frame
datos <- data.frame(respuesta = res,
genero = gen)
Haciendo uso de dplyr
puedes obtener el porcentaje de cada tipo de respuesta para cada género. En el siguiente ejemplo estamos calculando el porcentaje por tipo de respuesta y agregando una nueva columna con porcentajes, haciendo uso de la función pcntent
de la librería scales
.
# install.packages("dplyr")
# install.packages("scales")
library(dplyr)
# Transformación de los datos
df <- datos %>%
group_by(respuesta) %>% # Variable a ser transformada
count() %>%
ungroup() %>%
mutate(pcnt = `n` / sum(`n`)) %>%
arrange(pcnt) %>%
mutate(etiquetas = scales::percent(pcnt))
En la tabla anterior la primera columna representa las posibles respuestas, la segunda la frecuencia absoluta, la tercera la frecuencia relativa y la cuarta el porcentaje con el símbolo.
Una vez transformes tus datos, puedes pasar la columna que contiene las frecuencias relativas a y
y colorear los sectores (fill
) en base a la variable categórica que representa los grupos.
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = "", y = pcnt, fill = respuesta)) +
geom_col() +
coord_polar(theta = "y")
La columna labels
permite añadir las etiquetas con porcentajes. En este ejemplo las estamos agregando con geom_text
.
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = "", y = pcnt, fill = respuesta)) +
geom_col() +
geom_text(aes(label = etiquetas),
position = position_stack(vjust = 0.5)) +
coord_polar(theta = "y")
Una alternativa a geom_text
es geom_label
. Ten en cuenta que se ha tenido que añadir show.legend = FALSE
para evitar que se muestre una letra sobre los recuadros de la leyenda.
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = "", y = pcnt, fill = respuesta)) +
geom_col() +
geom_label(aes(label = etiquetas),
position = position_stack(vjust = 0.5),
show.legend = FALSE) +
coord_polar(theta = "y")
Los gráficos de sectores se pueden personalizar de distintas maneras. Puedes personalizar la leyenda, los colores o los temas. En el siguiente ejemplo hemos eliminado el tema por defecto con theme_void
. Consulta el artículo sobre diagramas de sectores en ggplot2 para obtener detalles adicionales sobre personalizar gráficos de sectores en ggplot2 y su leyenda.
# install.packages("ggplot2")
library(ggplot2)
ggplot(df, aes(x = "", y = pcnt, fill = respuesta)) +
geom_col(color = "black") +
geom_label(aes(label = etiquetas), color = c(1, "white", "white"),
position = position_stack(vjust = 0.5),
show.legend = FALSE) +
guides(fill = guide_legend(title = "respuesta")) +
scale_fill_viridis_d() +
coord_polar(theta = "y") +
theme_void()
También te puede interesar