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

如何在Hierarchical Edge Bundle中仅可视化二级连接的文本?

仅显示层次边束图中二级连接相关节点文本的解决方案

你需要基于层级结构和二级连接数据生成cactustree布局的层次边束图,但仅保留与二级连接相关的节点文本,可通过筛选节点并控制文本显示条件实现,具体步骤如下:

原始数据

hierarchy=data.frame(from=c("1","1","1","1","1.1","1.1","1.2","1.2","1.3","1.3","1.4","1.4"),
                    to=c("1.1","1.2","1.3","1.4","1.1.1","1.1.2","1.2.1","1.2.2","1.3.1","1.3.2","1.4.1","1.4.2"))
rel = data.frame(from=c("1.3.1","1.3.1","1.4.2","1.4.2"),
                 to=c("1.1.2","1.3.2","1.2.1","1.1.1"))

常规生成代码(显示所有节点文本)

hierarchy_gr = as_tbl_graph(hierarchy)
vertices_hierarchy = hierarchy_gr %>% V()
from <- match( rel$from, vertices_hierarchy$name)
to <- match( rel$to, vertices_hierarchy$name)
ggraph(hierarchy_gr, 'cactustree',upright=TRUE) + 
#  geom_node_circle(aes(fill = depth), size = 0.25, alpha = 0.2) + 
  geom_conn_bundle(data = get_con(from = from, to = to), colour="red",linewidth=1,tension = 1) +
  geom_node_text(aes(label = name, size=0.5),check_overlap = TRUE) +
  theme(legend.position = "none") +
  coord_fixed()

修改后的代码(仅显示二级连接相关节点文本)

核心思路:提取二级连接rel中所有涉及的节点名称,在绘制文本时仅对这些节点显示名称,其余节点不输出文本。

library(tidygraph)
library(ggraph)

# 加载数据
hierarchy=data.frame(from=c("1","1","1","1","1.1","1.1","1.2","1.2","1.3","1.3","1.4","1.4"),
                    to=c("1.1","1.2","1.3","1.4","1.1.1","1.1.2","1.2.1","1.2.2","1.3.1","1.3.2","1.4.1","1.4.2"))
rel = data.frame(from=c("1.3.1","1.3.1","1.4.2","1.4.2"),
                 to=c("1.1.2","1.3.2","1.2.1","1.1.1"))

# 创建图对象
hierarchy_gr = as_tbl_graph(hierarchy)
vertices_hierarchy = hierarchy_gr %>% V()
from <- match( rel$from, vertices_hierarchy$name)
to <- match( rel$to, vertices_hierarchy$name)

# 提取所有二级连接涉及的节点名称(去重)
relevant_nodes <- unique(c(rel$from, rel$to))

# 绘图:仅显示相关节点的文本
ggraph(hierarchy_gr, 'cactustree', upright=TRUE) + 
  geom_conn_bundle(data = get_con(from = from, to = to), colour="red", linewidth=1, tension = 1) +
  # 通过ifelse控制文本显示:仅在relevant_nodes中的节点才显示name,否则为空
  geom_node_text(aes(label = ifelse(name %in% relevant_nodes, name, "")), size=0.5, check_overlap = TRUE) +
  theme(legend.position = "none") +
  coord_fixed()

关键说明

  • relevant_nodes集合包含了所有二级连接的起点和终点节点,确保只保留这些节点的文本
  • geom_node_text中通过ifelse(name %in% relevant_nodes, name, "")实现条件显示:符合条件的节点显示名称,其余节点文本为空(即不显示)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 14:05:21