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

如何在ggtree绘制的进化树中为节点和枝端添加外部数值标注

在ggtree中为进化树的节点和枝端标注数值信息

问题说明

需要给进化树的所有枝端和内部节点标注对应的基因计数,现有CSV数据框(包含节点/枝端名称及对应计数),基础绘图代码可正常运行,但尝试关联数据并添加标注时出现报错:Error in UseMethod("left_join") : no applicable method for 'left_join' applied to an object of class "NULL"

报错原因

  1. 错误将%<+%(ggtree的数据集关联操作)与ggplot图层操作混合赋值给原始树对象:tree <- tree %<+% dd + geom_tiplab() 这种写法会破坏对象结构,%<+%应作用于ggtree绘图对象,而非原始phylo对象。
  2. 未确保数据框的名称列与树的节点/枝端名称匹配(ggtree默认匹配label列)。

解决方案

步骤1:预处理数据

确保数据框中存储节点/枝端名称的列名为label(或在关联时指定匹配列),示例数据处理:

# 读取CSV数据,注意分隔符(逗号分隔用sep=",",制表符用sep="\t")
dd <- read.table(file = 'raw_data/counts.csv', sep='\t', header=TRUE)
# 将原列名"Node Name"改为ggtree默认的"label"
colnames(dd)[colnames(dd) == "Node Name"] <- "label"

步骤2:正确关联数据并添加标注

使用%<+%将数据框关联到ggtree绘图对象,然后用geom_text同时标注枝端和内部节点的数值(geom_tiplab仅处理枝端,geom_nodelab仅处理内部节点,geom_text可统一处理):

library(tidyverse)
library(ggtree)

# 读取进化树
tree <- read.tree("raw_data/tree.txt")

# 绘图并添加标注
ggtree(tree, branch.length = 'none') %<+% dd +
  theme_tree2() +
  # 标注枝端和节点的计数,hjust控制水平位置,避免与树枝重叠
  geom_text(aes(label = Count), hjust = -0.1, size = 3) +
  # 保留原有的枝端名称标注(如果需要)
  geom_tiplab(align = TRUE, linesize = .5) +
  xlim(0, 25)

# 保存图片
ggsave("test_2.pdf", width = 60, height = 80, units = "cm", limitsize = FALSE)

进阶:区分枝端和节点的标注样式

如果需要给枝端和节点设置不同的标注样式(比如颜色、大小),可以通过subset参数筛选:

ggtree(tree, branch.length = 'none') %<+% dd +
  theme_tree2() +
  # 标注内部节点计数,颜色设为红色
  geom_text(aes(label = Count), subset = .!isTip, color = "red", hjust = 1.1, size = 3) +
  # 标注枝端计数,颜色设为蓝色
  geom_text(aes(label = Count), subset = .isTip, color = "blue", hjust = -0.1, size = 3) +
  geom_tiplab(align = TRUE, linesize = .5) +
  xlim(0, 25)

关键注意事项

  • 数据框中的label列必须与树的tip.label(枝端名称)和node.label(内部节点名称)完全匹配,包括大小写、空格和特殊字符。
  • 如果树的内部节点没有名称,需要用节点编号(可通过ggtree(tree)$data查看节点的node列)来匹配数据框,此时数据框的label列应替换为节点编号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 07:06:32