Diagrama aluvial (alluvial plot) en ggplot2 con ggalluvial

Librería

ggalluvial

Autor principal

Cory Brunson

Conjunto de datos de muestra

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

Gráfico aluvial (alluvial plot)

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()

Alluvial plot en ggplot2

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()

Alluvial plot en R con ggalluvial

Tipos de curvas

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:

Diagrama aluvial en R

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()

Tipo de curva de un gráfico aluvial

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()

Funciones geom_alluvium y geom_stratum en ggplot2

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()

Cambiar el tipo de curva en ggalluvial

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()

Paquete ggalluvial en R

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()

Diagrama aluvial en R

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.

Personalización del color

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()

Color de fondo de un alluvial plot

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()

Cambiar la escala de color en ggalluvial

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()

Colores personalizados de los flujos de un alluvial plot

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()

Cambiar el color de los estratos en ggalluvial

Personalización de la leyenda

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.

Cambiar el título de la leyenda de un diagrama aluvial en R

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"))

Cambiar las etiquetas de la leyenda en ggalluvial

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 de un gráfico aluvial en R

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