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

使用ggplot绘制Sankey图:实验参数可视化的数据格式问题

解决Sankey图标签与条形比例问题

问题根源

  1. 原代码中make_long自动生成节点编号,未关联参数名称(parm),导致标签显示错误。
  2. 未过滤值为0的参数,生成了无意义的空节点,干扰条形比例。
  3. 未在绘图映射中指定value字段,节点大小无法匹配参数值。

修正后完整代码

数据处理部分

library(tidyverse)
library(ggsankey)

# 原始数据定义
doc1 <- tribble(
  ~parm, ~value,
  "b1", 0.009,
  "g1", 0.664,
  "b2", 0.000,
  "ra", 0.000,
  "rc", 0.000,
  "ax", 0.084,
  "cx", 0.086,
  "ex", 0.179,
  "ay", 0.045,
  "cy", 0.043,
  "ey", 0.102
) %>% mutate(model = "exp")

doc2 <- tribble(
  ~parm, ~value,
  "b1", 0.181,
  "g1", 0.289,
  "b2", 0.181,
  "ra", 0.000,
  "rc", 0.000,
  "ax", 0.001,
  "cx", 0.001,
  "ex", 0.002,
  "ay", 0.001,
  "cy", 0.001,
  "ey", 0.002,
  "re", 0.000,
  "rf", 0.000,
  "b3", 0.289
) %>% mutate(model = "exp2")

# 合并并清洗数据
combined <- bind_rows(doc1, doc2) %>%
  filter(value > 0) %>%  # 移除值为0的无效参数
  pivot_wider(names_from = model, values_from = value, values_fill = 0)

# 转换为Sankey图所需格式,绑定参数名称作为节点ID
finalpow <- combined %>%
  make_long(exp, exp2, id = parm)

绘图部分

ggplot(finalpow, aes(
  x = x,
  next_x = next_x,
  node = id,          # 使用参数名作为节点标识
  next_node = next_id,
  fill = factor(id),  # 按参数名填充颜色
  label = id,         # 标签显示参数名
  value = value       # 用参数值控制流量与节点大小
)) +
  geom_sankey(flow.alpha = 0.5, node.color = 1) +
  geom_sankey_label(size = 3.5, color = 1, fill = "white") +
  scale_fill_viridis_d() +
  theme_sankey(base_size = 16) +
  guides(fill = guide_legend(title = "参数名称")) +
  labs(x = NULL)

关键修正点

  • 过滤无效数据:通过filter(value > 0)移除值为0的参数,避免空节点干扰图表。
  • 绑定节点标识:make_long中指定id = parm,让节点直接关联参数名称,解决标签错误问题。
  • 映射数值字段:在aes中添加value = value,确保条形大小与参数值成比例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 06:15:46