Gráfico aluvial con 2 fuentes diferentes pero una variable convergente/compartida [R]
Tengo experiencia en la creación de gráficos aluviales utilizando el paquete “ggalluvial”. Sin embargo, me he encontrado con un problema cuando intento crear un gráfico aluvial con dos fuentes diferentes que convergen en una variable.
Aquí hay un ejemplo de datos:
library(dplyr)
library(ggplot2)
library(ggalluvial)
data <- data.frame(
unique_alluvium_entries = seq(1:10),
label_1 = c("A", "B", "C", "D", "E", rep(NA, 5)),
label_2 = c(rep(NA, 5), "F", "G", "H", "I", "J"),
shared_label = c("a", "b", "c", "c", "c", "c", "c", "a", "a", "b")
)
Aquí está el código que uso para hacer el gráfico:
“`{r}
<h1>Preparar los datos</h1>
data <- data %>%
group_by(shared_label) %>%
mutate(freq = n())
data <- reshape2::melt(data, id.vars = c("unique_alluvium_entries", "freq"))
data$variable <- factor(data$variable, levels = c("label_1", "shared_label", "label_2"))
<h1>Crear el gráfico</h1>
ggplot(data,
aes(x = variable, stratum = value, alluvium = unique_alluvium_entries,
y = freq, fill = value, label = value)) +
scale_x_discrete(expand = c(.1, .1)) +
geom_flow() +
geom_stratum(color = "grey", width = 1/4, na.rm = TRUE) +
geom_text(stat = "stratum", size = 4) +
theme_void() +
theme(
axis.text.x = element_text(size = 12, face = "bold")
)
“`
Como puedes ver, puedo eliminar los valores NA, pero la etiqueta “shared_label” no se apila correctamente. Cada fila única debería apilarse encima de las demás en la columna “shared_label”. Esto también solucionaría el problema de tamaño para que sean de tamaño igual a lo largo del eje y.
¿Alguna idea de cómo solucionar esto? He probado “ggsankey”, pero surge el mismo problema y no puedo eliminar los valores NA. ¡Cualquier consejo es muy apreciado!
davy.ai
Una posible solución a este problema es crear una variable ficticia adicional para la columna
shared_label
de modo que se pueda apilar correctamente. Aquí hay un ejemplo de código que incluye esta modificación:¡Esto debería producir un gráfico donde la columna
shared_label
se apile correctamente y cada fila única tenga el mismo tamaño en el eje y. Avísame si esto ayuda!