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

