El conjunto de datos vaccinations del paquete ggalluvial contiene una encuesta “que preguntó a los encuestados su probabilidad de vacunarse contra la influenza”. La variable "response" es la probabilidad discretizada de vacunarse, "freq" el número de encuestados y "survey" el nombre de cada encuesta.
# install.packages("ggalluvial")
library(ggalluvial)
vaccinations
El paquete ggalluvial proporciona las funciones geom_alluvium y geom_stratum para crear gráficos aluviales en ggplot2. Si prefieres diagramas de Sankey consulta el paquete ggsankey. Tendrás que pasar tus datos en formato long, especificar las variables de los ejes dentro de aes y usar las funciones anteriores.
Ten en cuenta que también puedes agregar los nombres para cada estrato (en estos ejemplos no se verán porque hemos usado theme_void), los nombres de las variables de los ejes y cambiar el tema de ggplot2, entre otras personalizaciones.
# install.packages("ggalluvial")
library(ggalluvial)
ggplot(data = vaccinations,
aes(axis1 = survey, axis2 = response, y = freq)) +
geom_alluvium(aes(fill = response)) +
geom_stratum() +
geom_text(stat = "stratum",
aes(label = after_stat(stratum))) +
scale_x_discrete(limits = c("Encuesta", "Respuesta"),
expand = c(0.15, 0.05)) +
theme_void()

Si tu conjunto de datos contiene más variables categóricas puedes pasarlas a aes (axis1, axis2, axis3 …) tal y como se muestra en el siguiente ejemplo.
# install.packages("ggalluvial")
library(ggalluvial)
ggplot(data = vaccinations,
aes(axis1 = survey, # Primera variable del eje X
axis2 = response, # Segunda variable del eje X
axis3 = survey, # Tercera variable del eje X
y = freq)) +
geom_alluvium(aes(fill = response)) +
geom_stratum() +
geom_text(stat = "stratum",
aes(label = after_stat(stratum))) +
scale_x_discrete(limits = c("Encuesta", "Respuesta",
"Encuesta"),
expand = c(0.15, 0.05)) +
theme_void()

El tipo de curva se puede personalizar con el argumento curve_type de la función geom_alluvium. El valor por defecto es "xspline", que produce una aproximación de splines con cuatro puntos por curva. Las alternativas se muestran a continuación:

Linear
# install.packages("ggalluvial")
library(ggalluvial)
ggplot(data = vaccinations,
aes(axis1 = survey, axis2 = response, y = freq)) +
geom_alluvium(aes(fill = response),
curve_type = "linear") +
geom_stratum() +
geom_text(stat = "stratum",
aes(label = after_stat(stratum))) +
scale_x_discrete(limits = c("Encuesta", "Respuesta"),
expand = c(0.15, 0.05)) +
theme_void()

Cubic
# install.packages("ggalluvial")
library(ggalluvial)
ggplot(data = vaccinations,
aes(axis1 = survey, axis2 = response, y = freq)) +
geom_alluvium(aes(fill = response),
curve_type = "cubic") +
geom_stratum() +
geom_text(stat = "stratum",
aes(label = after_stat(stratum))) +
scale_x_discrete(limits = c("Encuesta", "Respuesta"),
expand = c(0.15, 0.05)) +
theme_void()

Quintic
# install.packages("ggalluvial")
library(ggalluvial)
ggplot(data = vaccinations,
aes(axis1 = survey, axis2 = response, y = freq)) +
geom_alluvium(aes(fill = response),
curve_type = "quintic") +
geom_stratum() +
geom_text(stat = "stratum",
aes(label = after_stat(stratum))) +
scale_x_discrete(limits = c("Encuesta", "Respuesta"),
expand = c(0.15, 0.05)) +
theme_void()

Sine
# install.packages("ggalluvial")
library(ggalluvial)
ggplot(data = vaccinations,
aes(axis1 = survey, axis2 = response, y = freq)) +
geom_alluvium(aes(fill = response),
curve_type = "sine") +
geom_stratum() +
geom_text(stat = "stratum",
aes(label = after_stat(stratum))) +
scale_x_discrete(limits = c("Encuesta", "Respuesta"),
expand = c(0.15, 0.05)) +
theme_void()

Arctangent
# install.packages("ggalluvial")
library(ggalluvial)
ggplot(data = vaccinations,
aes(axis1 = survey, axis2 = response, y = freq)) +
geom_alluvium(aes(fill = response),
curve_type = "arctangent") +
geom_stratum() +
geom_text(stat = "stratum",
aes(label = after_stat(stratum))) +
scale_x_discrete(limits = c("Encuesta", "Respuesta"),
expand = c(0.15, 0.05)) +
theme_void()

Sigmoid
# install.packages("ggalluvial")
library(ggalluvial)
ggplot(data = vaccinations,
aes(axis1 = survey, axis2 = response, y = freq)) +
geom_alluvium(aes(fill = response),
curve_type = "sigmoid") +
geom_stratum() +
geom_text(stat = "stratum",
aes(label = after_stat(stratum))) +
scale_x_discrete(limits = c("Encuesta", "Respuesta"),
expand = c(0.15, 0.05)) +
theme_void()
Ten en cuenta que existe un argumento adicional llamado curve_range para tipos de curvas alternativas basadas en funciones asintóticas. Escribe geom_alluvium para obtener detalles adicionales.
Es posible personalizar los colores de los flujos. Puedes usar un único color para ellos, usar una paleta de colores predefinida o pasar tu propio vector de colores. Ten en cuenta que también es posible modificar los colores de las cajas de los estratos.
Color de fondo
# install.packages("ggalluvial")
library(ggalluvial)
ggplot(data = vaccinations,
aes(axis1 = survey, axis2 = response, y = freq)) +
geom_alluvium(aes(fill = "red")) +
geom_stratum() +
geom_text(stat = "stratum",
aes(label = after_stat(stratum))) +
scale_x_discrete(limits = c("Encuesta", "Respuesta"),
expand = c(0.15, 0.05)) +
scale_fill_viridis_d()
theme_void()

Paleta de colores
# install.packages("ggalluvial")
library(ggalluvial)
ggplot(data = vaccinations,
aes(axis1 = survey, axis2 = response, y = freq)) +
geom_alluvium(aes(fill = response)) +
geom_stratum() +
geom_text(stat = "stratum",
aes(label = after_stat(stratum))) +
scale_x_discrete(limits = c("Encuesta", "Respuesta"),
expand = c(0.15, 0.05)) +
scale_fill_viridis_d() +
theme_void()

Colores personalizados
# install.packages("ggalluvial")
library(ggalluvial)
# Colors
colors <- hcl.colors(4, "Red-Blue")
ggplot(data = vaccinations,
aes(axis1 = survey, axis2 = response, y = freq)) +
geom_alluvium(aes(fill = response)) +
geom_stratum() +
geom_text(stat = "stratum",
aes(label = after_stat(stratum))) +
scale_x_discrete(limits = c("Encuesta", "Respuesta"),
expand = c(0.15, 0.05)) +
scale_fill_manual(values = colors) +
theme_void()

Color de los estratos
# install.packages("ggalluvial")
library(ggalluvial)
ggplot(data = vaccinations,
aes(axis1 = survey, axis2 = response, y = freq)) +
geom_alluvium(aes(fill = response)) +
geom_stratum(aes(fill = response)) +
geom_text(stat = "stratum",
aes(label = after_stat(stratum))) +
scale_x_discrete(limits = c("Encuesta", "Respuesta"),
expand = c(0.15, 0.05)) +
theme_void()

Como el paquete ggalluvial se basa en ggplot2 es posible personalizar la leyenda de los gráficos, como cambiar el título, las etiquetas, su posición o eliminar la leyenda por completo tal y como se muestra en los ejemplos siguientes.

Título de la leyenda
# install.packages("ggalluvial")
library(ggalluvial)
ggplot(data = vaccinations,
aes(axis1 = survey, axis2 = response, y = freq)) +
geom_alluvium(aes(fill = response)) +
geom_stratum() +
geom_text(stat = "stratum",
aes(label = after_stat(stratum))) +
scale_x_discrete(limits = c("Encuesta", "Respuesta"),
expand = c(0.15, 0.05)) +
theme_void() +
guides(fill = guide_legend(title = "Title"))

Etiquetas de la leyenda
# install.packages("ggalluvial")
library(ggalluvial)
ggplot(data = vaccinations,
aes(axis1 = survey, axis2 = response, y = freq)) +
geom_alluvium(aes(fill = response)) +
geom_stratum() +
geom_text(stat = "stratum",
aes(label = after_stat(stratum))) +
scale_x_discrete(limits = c("Encuesta", "Respuesta"),
expand = c(0.15, 0.05)) +
theme_void() +
scale_fill_hue(labels = c("A", "B", "C", "D"))

Eliminar la leyenda
# install.packages("ggalluvial")
library(ggalluvial)
ggplot(data = vaccinations,
aes(axis1 = survey, axis2 = response, y = freq)) +
geom_alluvium(aes(fill = response)) +
geom_stratum() +
geom_text(stat = "stratum",
aes(label = after_stat(stratum))) +
scale_x_discrete(limits = c("Encuesta", "Respuesta"),
expand = c(0.15, 0.05)) +
theme_void() +
theme(legend.position = "none")
Aprende estadística desde lo básico hasta técnicas avanzadas, explicado con claridad
Ir al sitio
También te puede interesar