You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中创建Y轴分层对齐的Alluvial图(保留流量厚度与波形)

实现分层对齐的Alluvial图(消除类别过渡偏移)

需求说明

需要创建Alluvial图,满足以下要求:

  • 类别在Y轴分层对齐(同类别在两个时间轴上的Y位置对应),解决示例图中Medium→Medium过渡时的个体“下移”视觉问题
  • 保留线条厚度对应案例数量的展示
  • 保留Alluvial图的波浪形态

解决方案:使用ggalluvial包的对齐参数

默认的geom_alluvium采用justify对齐方式,会按数据顺序排布流,导致同类别过渡时出现偏移。通过设置align = "center"参数,可让同类别在两个轴上的Y轴中心位置对齐,消除偏移,同时保留原有视觉特性。

完整代码

library(ggplot2)
library(ggalluvial)

# 构建测试数据
df_test <- data.frame(
  ID = 1:11,
  T1 = c("Low", "Very high", "Medium", "Low", "High", "Medium", "High", "Medium", "Low", "High", "Low"),
  T2 = c("High", "High", "Medium", "Very high", "High", "High", "Medium", "High", "Medium", "High", "Low")
)

# 设置类别层级,确保前后时间点的类别顺序统一
cat_levels <- c("Very high","High",  "Medium", "Low")
df_test$T1 <- factor(df_test$T1, levels = cat_levels)
df_test$T2 <- factor(df_test$T2, levels = cat_levels)

# 创建分层对齐的Alluvial图
ggplot(df_test, aes(axis1 = T1, axis2 = T2)) +
  # 核心:设置align = "center"实现同类别Y轴对齐,保留波浪形态和厚度
  geom_alluvium(aes(fill = T1), width = 1/12, stat = "alluvium", align = "center") +
  geom_stratum(width = 1/5) +
  geom_text(stat = "stratum", aes(label = after_stat(stratum)), size = 3) +
  scale_x_discrete(limits = c("T1", "T2")) +
  scale_fill_manual(values = c("Low" = "skyblue",
                               "Medium" = "orange",
                               "High" = "red",
                               "Very high" = "darkred")) +
  labs(title = "分类从T1到T2的过渡(分层对齐版)",
       x = "时间点",
       y = "个体数量",
       fill = "状态") +
  theme_minimal() +
  theme(axis.text.x = element_text(face = "bold", size = 14),
        axis.text.y = element_blank(),
        axis.ticks.y = element_blank(),
        panel.grid.major.y = element_blank())

关键说明

  • align = "center":让每个类别在两个轴上的Y轴中心位置保持一致,确保同类别过渡的流垂直对齐,消除偏移
  • 线条厚度自动对应案例数量:geom_alluvium会根据每个过渡组的个体数自动调整线条粗细
  • 波浪形态保留:默认的geom_alluvium会维持平滑的波浪路径,无需额外设置

内容的提问来源于stack exchange,提问作者Oscar Kjell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 01:17:02