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

r-graph-gallery层次边捆绑示例运行异常,求修复方案

层次边捆绑可视化报错修复方案

问题根源

警告Removed 1 row containing missing values (geom_edge_path()).的核心原因是连接数据中存在无效条目:

  • connect数据里出现自连接(from和to为同一节点),这类连接无法生成有效边路径
  • 部分from/to值在顶点列表中匹配失败,产生NA值,导致边捆绑函数无法生成有效坐标

修复步骤

1. 清理无效连接数据

在生成连接数据后,先过滤掉自连接和不在顶点列表中的节点:

# 过滤自连接(from与to相同的条目)
connect <- connect[connect$from != connect$to, ]

# 定义所有合法顶点,过滤不在列表中的节点
valid_nodes <- unique(c(as.character(hierarchy$from), as.character(hierarchy$to)))
connect <- connect[connect$from %in% valid_nodes & connect$to %in% valid_nodes, ]

2. 修正顶点匹配逻辑,避免NA值

匹配顶点ID时,双重过滤掉无效的NA值:

from <- match(connect$from, vertices$name)
to <- match(connect$to, vertices$name)

# 过滤匹配失败产生的NA
valid_idx <- !is.na(from) & !is.na(to)
from <- from[valid_idx]
to <- to[valid_idx]

3. 完整修正后的代码

整合上述步骤后的完整可运行代码:

# 创建层级结构数据框
set.seed(1234)
d1 <- data.frame(from="origin", to=paste("group", seq(1,10), sep=""))
d2 <- data.frame(from=rep(d1$to, each=10), to=paste("subgroup", seq(1,100), sep="_"))
hierarchy <- rbind(d1, d2)
 
# 创建叶子节点连接数据框
all_leaves <- paste("subgroup", seq(1,100), sep="_")
connect <- rbind( 
  data.frame( from=sample(all_leaves, 100, replace=T) , to=sample(all_leaves, 100, replace=T)), 
  data.frame( from=sample(head(all_leaves), 30, replace=T) , to=sample( tail(all_leaves), 30, replace=T)), 
  data.frame( from=sample(all_leaves[25:30], 30, replace=T) , to=sample( all_leaves[55:60], 30, replace=T)), 
  data.frame( from=sample(all_leaves[75:80], 30, replace=T) , to=sample( all_leaves[55:60], 30, replace=T)) )
connect$value <- runif(nrow(connect))

# --- 新增:清理无效连接 ---
connect <- connect[connect$from != connect$to, ]
valid_nodes <- unique(c(as.character(hierarchy$from), as.character(hierarchy$to)))
connect <- connect[connect$from %in% valid_nodes & connect$to %in% valid_nodes, ]
 
# 创建顶点数据框
vertices  <-  data.frame(
  name = valid_nodes, 
  value = runif(length(valid_nodes))
) 
# 添加分组信息
vertices$group  <-  hierarchy$from[ match( vertices$name, hierarchy$to ) ]
 

# 创建图对象
mygraph <- graph_from_data_frame( hierarchy, vertices=vertices )
 
# 匹配连接对应的顶点ID
from  <-  match( connect$from, vertices$name)
to  <-  match( connect$to, vertices$name)

# --- 新增:过滤匹配失败的NA ---
valid_idx <- !is.na(from) & !is.na(to)
from <- from[valid_idx]
to <- to[valid_idx]
 
# 绘制可视化图
ggraph(mygraph, layout = 'dendrogram', circular = TRUE) + 
  geom_conn_bundle(data = get_con(from = from, to = to), alpha=0.2, colour="skyblue", tension = .5) + 
  geom_node_point(aes(filter = leaf, x = x*1.05, y=y*1.05)) +
  theme_void()

4. 自有数据集适配建议

针对你的自定义数据集,需确保:

  • 层级数据hierarchy中的所有节点都在顶点列表中存在
  • 连接数据connect中:
    • 无自连接(from≠to)
    • 所有节点都能在vertices$name中找到匹配
    • 可用table(connect$from %in% vertices$name)检查匹配覆盖率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 03:14:57