使用networkD3绘制R桑基图时图表不显示问题求助
问题排查与解决:networkD3桑基图无报错但不显示图表
核心原因
networkD3的sankeyNetwork()函数要求Source(源节点)和Target(目标节点)必须是对应Nodes数据框中节点的索引值(从0开始计数),但你当前links数据里用的是节点的id值(10、35、40等),和Nodes的索引不匹配,导致无法渲染出图表。
修复步骤
- 先创建节点id到索引的映射表,把links里的source和target转换成对应的索引值
- 修正links数据的列类型,确保source和target为数值型
修正后的完整代码
# 导入包 library(readxl) library(networkD3) # 读取数据 nodes <- read_excel("prova_sankey.xlsx", sheet = "nodes", col_types = c("text", "text")) links <- read_excel("prova_sankey.xlsx", sheet = "links", col_types = c("numeric", "numeric", "numeric")) # 创建节点id到索引的映射(networkD3索引从0开始) node_id_map <- setNames(seq(0, nrow(nodes)-1), nodes$id) # 将links中的source和target转换为索引值 links$source <- node_id_map[as.character(links$source)] links$target <- node_id_map[as.character(links$target)] # 绘制桑基图 sankeyNetwork(Links = links, Nodes = nodes, Source = "source", Target = "target", Value = "value", NodeID = "name")
额外注意点
- 确保Nodes数据框包含links中出现的所有节点id,否则映射时会出现NA值,导致部分连接无法显示
- 读取links数据时,target列需设为
numeric类型,你之前代码里设为text会导致转换失败,已在修正代码中调整
内容的提问来源于stack exchange,提问作者Andrea Stringhetti
相关产品推荐
相关产品推荐

