使用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
相关产品推荐
相关产品推荐

