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

使用R的networkD3绘制桑基图出现空白输出的问题求助

R桑基图无输出问题排查与修正

核心问题分析

  • 缺失必要包加载:sankeyNetwork属于networkD3包,原代码未执行包加载操作,导致函数无法调用
  • 节点索引错误:sankeyNetwork要求source和target为从0开始的节点索引,原代码中部分索引与注释逻辑不符,存在错误映射
  • 节点命名不规范:节点名称带空格(如"Always "),易引发识别混淆,建议明确区分前后调研阶段的节点

修正后的代码

# 加载依赖包
library(networkD3)

# 重新定义节点:明确区分前后阶段,避免空格混淆
nodes = data.frame(
  name = c("Always_前", "Often_前", "Sometimes_前", "Rarely_前", "Never_前", 
           "Always_后", "Often_后", "Sometimes_后", "Rarely_后", "Never_后")
)

# 创建边数据:修正索引,确保source/target对应正确节点(0起始)
links = as.data.frame(matrix(
  c(
    4, 8, 1,  # Never_前 → Rarely_后,权重1
    4, 7, 1,  # Never_前 → Sometimes_后,权重1
    4, 6, 1,  # Never_前 → Often_后,权重1
    3, 9, 1,  # Rarely_前 → Never_后,权重1
    2, 7, 2,  # Sometimes_前 → Sometimes_后,权重2
    2, 5, 3,  # Sometimes_前 → Always_后,权重3
    1, 6, 2,  # Often_前 → Often_后,权重2
    1, 5, 1,  # Often_前 → Always_后,权重1
    0, 6, 1,  # Always_前 → Often_后,权重1
    0, 5, 1   # Always_前 → Always_后,权重1
  ), 
  byrow = TRUE, 
  ncol = 3
))

names(links) = c("source", "target", "value")

# 绘制桑基图
p = sankeyNetwork(
  Links = links, 
  Nodes = nodes,
  Source = "source", 
  Target = "target",
  Value = "value", 
  NodeID = "name",
  fontSize = 16, 
  nodeWidth = 40
)

# 输出图形
p

自定义节点颜色补充

如果需要自定义节点颜色,修正后的colourScale写法如下(注意d3语法不需要R的c()函数):

node_color <- 'd3.scaleOrdinal()
  .domain(["Always_前", "Often_前", "Sometimes_前", "Rarely_前", "Never_前", "Always_后", "Often_后", "Sometimes_后", "Rarely_后", "Never_后"])
  .range(["red", "blue", "orange", "yellow", "pink", "purple", "green", "black", "indigo", "cyan"])'

在sankeyNetwork函数中添加colourScale = node_color参数即可生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 12:31:00