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

如何在R中不使用ggtree绘制指定合并结构的树形关系图

方案1:使用igraph包自定义布局实现

你描述的是典型的级联汇聚二叉树,结构规律非常明确,用igraph完全可以实现,只需要手动指定节点坐标即可,不需要依赖ggtree。

实现步骤:

  1. 首先构造边数据,计算每个节点所属的层级
  2. 按照层级给每个节点分配x、y坐标,保证同层级的两个节点横向均匀分布,不同层级纵向对齐
  3. 调用igraph的plot函数,关闭默认布局,使用自定义坐标绘制

代码示例:

# 加载igraph包
library(igraph)

# 示例数据,可替换为你自己的in-out数据
edge_df <- data.frame(
  in = c(1,2,3,4,5,6),
  out = c(3,3,5,5,7,7)
)
colnames(edge_df) <- c("from", "to") # 适配igraph的边命名规则

# 构造图对象
g <- graph_from_data_frame(edge_df, directed = TRUE)

# 手动指定节点坐标(根据你的结构规律可自动生成,这里以3层结构为例)
# y坐标越大代表层级越靠上,x坐标控制横向位置
coords <- matrix(
  c(1,4,  # 节点1、2的坐标(x,y)
    2,4,
    1.5,3, # 节点3、4的坐标
    2.5,3,
    2,2, # 节点5、6的坐标
    3,2,
    2.5,1), # 节点7的坐标
  ncol = 2, byrow = TRUE
)
# 给坐标行命名对应节点ID
rownames(coords) <- V(g)$name

# 绘图
plot(g, 
     layout = coords,
     vertex.size = 20, # 节点大小
     vertex.color = "white", # 节点填充色
     vertex.label.color = "black", # 节点文字颜色
     edge.arrow.size = 0.5, # 箭头大小
     edge.color = "black")

如果需要自动生成坐标,可根据你的结构规律编写逻辑:层级为k的层如果不是最后一层,就有2个节点,x坐标分别为k+0.5和k+1.5,y坐标为总层数 - k +1即可。


方案2:纯base R绘制(无需安装任何额外包)

如果连igraph也安装不了,可以直接用base R的segments函数画边,text函数标节点,完全自定义实现:

代码示例:

# 新建空白画布
plot(0, 0, type = "n", xlim = c(0.5, 3.5), ylim = c(0.5, 4.5), 
     xlab = "", ylab = "", axes = FALSE)

# 画各级节点和边
# level 1节点
text(1,4, "1", cex = 1.5)
text(2,4, "2", cex = 1.5)
# level1到level2的边
segments(1,4, 1.5, 3.5)
segments(2,4, 1.5, 3.5)
# level2节点
text(1.5,3, "3", cex = 1.5)
text(2.5,3, "4", cex = 1.5)
# level2到level3的边
segments(1.5,3, 2, 2.5)
segments(2.5,3, 2, 2.5)
# level3节点
text(2,2, "5", cex = 1.5)
text(3,2, "6", cex = 1.5)
# level3到level4的边
segments(2,2, 2.5, 1.5)
segments(3,2, 2.5, 1.5)
# 最后一层节点
text(2.5,1, "7", cex = 1.5)

如果需要横向绘制,只需要把x和y坐标互换即可,上下倒置则把y坐标全部取反或者调整ylim的大小顺序即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:15:03