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

在R中处理含NA的ggalluvial格式数据并绘制桑基图求助

用ggalluvial实现多阶段角色桑基图

核心思路

ggalluvial对数据格式和NA处理要求严格,要实现按角色(A/B/C/D)统一着色的5阶段桑基图,需确保数据结构正确映射路径、处理NA值,并将颜色绑定到角色类型而非阶段。


步骤1:数据准备与清洗

假设你的原始数据是宽格式(每行对应一条角色流转路径,含5个阶段列和频率列),先处理NA值(避免路径断裂):

library(ggplot2)
library(ggalluvial)
library(dplyr)

# 示例宽格式数据(替换为你的真实数据)
role_data <- tibble(
  Stage1 = c("A", "B", "A", NA),
  Stage2 = c("B", NA, "A", "C"),
  Stage3 = c(NA, "A", "B", "D"),
  Stage4 = c("C", "A", "C", NA),
  Stage5 = c("D", "C", "D", "B"),
  Frequency = c(10, 15, 8, 5)
)

# 将NA替换为显性类别(如"无角色"),保留流转路径的完整性
role_data_clean <- role_data %>%
  mutate(across(starts_with("Stage"), ~ifelse(is.na(.), "无角色", .)))

如果你的数据是长格式,需确保每条路径有唯一ID关联各阶段记录:

# 示例长格式数据(替换为你的真实数据)
role_long_data <- tibble(
  PathID = rep(1:4, each = 5),
  Stage = rep(paste0("阶段", 1:5), 4),
  Role = c("A", "B", "无角色", "C", "D",
           "B", "无角色", "A", "A", "C",
           "A", "A", "B", "C", "D",
           "无角色", "C", "D", "无角色", "B"),
  Frequency = rep(c(10,15,8,5), each =5)
)

步骤2:绘制桑基图

宽格式数据绘图代码

ggplot(role_data_clean,
       aes(y = Frequency,
           axis1 = Stage1, axis2 = Stage2, axis3 = Stage3, axis4 = Stage4, axis5 = Stage5)) +
  # 绘制冲积流,按角色统一着色
  geom_alluvium(aes(fill = Stage1), width = 1/12) +
  # 绘制分层节点,白色填充加黑色边框
  geom_stratum(width = 1/12, fill = "white", color = "black") +
  # 添加分层节点标签
  geom_text(stat = "stratum", aes(label = after_stat(stratum))) +
  # 设置x轴阶段顺序与标签
  scale_x_discrete(limits = c("Stage1", "Stage2", "Stage3", "Stage4", "Stage5"),
                   expand = c(0.05, 0.05),
                   labels = paste0("阶段", 1:5)) +
  # 自定义角色颜色(可根据示例图调整)
  scale_fill_manual(values = c(
    "A" = "#E74C3C", "B" = "#2ECC71", 
    "C" = "#3498DB", "D" = "#9B59B6", 
    "无角色" = "#BDC3C7"
  )) +
  labs(title = "5阶段角色流转桑基图", x = "角色阶段", y = "组合频率") +
  theme_minimal()

长格式数据绘图代码

ggplot(role_long_data,
       aes(x = Stage, stratum = Role, alluvium = PathID,
           y = Frequency, fill = Role)) +
  geom_alluvium(width = 1/12) +
  geom_stratum(width = 1/12, color = "black") +
  geom_text(stat = "stratum", aes(label = Role)) +
  # 自定义角色颜色(可根据示例图调整)
  scale_fill_manual(values = c(
    "A" = "#E74C3C", "B" = "#2ECC71", 
    "C" = "#3498DB", "D" = "#9B59B6", 
    "无角色" = "#BDC3C7"
  )) +
  labs(x = "角色阶段", y = "组合频率", title = "5阶段角色流转桑基图") +
  theme_minimal()

关键注意事项

  • NA处理:必须将NA替换为显性类别(如"无角色"),否则ggalluvial会自动忽略含NA的路径,导致流转逻辑缺失。
  • 着色逻辑:通过fill = Role(长格式)或fill = Stage1(宽格式,需确保路径起始角色能代表核心角色)实现同角色同色。
  • 格式匹配:宽格式需保证每行是完整路径,长格式需用PathID关联同一路径的不同阶段记录,频率值需对应整个路径的频次。
  • 样式调整:通过width参数修改冲积流和分层节点的宽度,scale_x_discrete调整x轴标签和间距,匹配你的示例图样式。

内容的提问来源于stack exchange,提问作者Anakin Skywalker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:51:24