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. 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")
También te puede interesar