如何使用 bootstrap 值注释 ggtree 对象?

How do I annotate a ggtree object with bootstrap values?

我有一个 class phylo 的系统发育树,有 24 个提示和 23 个内部节点。我 运行 使用 boot.phylo 对这棵树和数据进行了 bootstrap 分析,返回了一个包含 23 个 bootstrap 值的向量。我从我的原始树创建了一个 ggtree 对象,现在我试图将 bootstrap 值添加到节点。我做错了什么,但我不知道是什么。

这是我所做的:

gg.tr <- ggtree(mp.tree)
gg.tr + geom_label2(aes(subset=!isTip, label=bphylo$BP))

bphylo$BP 是 23 个 bootstrap 值的向量。当我 运行 此代码时,出现以下错误:

Error: Aesthetics must be either length 1 or the same as the data (47): subset, label, x, y

我不明白这个错误,因为我只想将 bootstrap 值放在可能的 47 个位置中的 23 个位置上。

当我调用以下函数时,我得到一个值 23:

length(which(gg.tr$data$isTip==FALSE))

如果 gg.tr$data$isTip==FALSE 的长度是 23 而我有 23 个 bootstrap 值,为什么我会收到一条错误消息告诉我我的标签长度​​错误?

您可以用 geom_text 注释您的树。如果没有看到您的数据,就很难知道发生了什么,但这里有一个具有可重现数据集的示例。

library(devtools)
devtools::install_github("GuangchuangYu/ggtree")

bs <- data.frame(nodename = c("t30", "t12", "t22", "t26", "t6", "t17", "t4","t7", "t9", "t1", "t8", "t25","t23",
                          "t28", "t10", "t20", "t3",  "t11", "t19", "t29", "t2","t18", "t24",
                          "t27", "t15", "t13", "t14", "t16", "t5","t21"), bootstrap = c(runif(30, 85, 98)), stringsAsFactors = F)
bs$bootstrap <- round(bs$bootstrap, digits = 0)
rownames(bs) <- NULL
nodesupport = c(round(runif(59, 65, 80), digits = 0))

set.seed(0)
tree <- rtree(30)
p <- ggtree(tree)
p <- p %<+% bs + geom_tiplab()
p <- p + geom_text(aes(label = bootstrap), hjust = 1, vjust = -0.4, size = 3) + geom_nodelab(aes(label = nodesupport)) # specify your node label here, looks like BP
p