0

我对 R陌生,所以如果这个问题很明显,我很抱歉。我想为系统发育树中的分支添加多个标签,但我只能弄清楚如何为每个分支添加一个标签。我正在使用以下代码:

treetext = "(Japon[&&NHX:S=2],(((Al,Luteo),(Loam,(Niet,Cal))),(((Car,Bar),(Aph,Long[&&NHX:S=1],((Yam,Stig),((Zey,Semp),(A,(Hap,(This,That))))))));"

mytree <- read.nhx(textConnection(treetext))

ggtree(mytree) + geom_tiplab() +
  geom_label(aes(x=branch, label=S))

我可以使用下面的代码将多个符号添加到一个分支中,但它非常费力,我不妨手动完成:

ggtree(mytree) + 
  geom_tiplab()+
  geom_nodepoint(aes(subset = node == 32, x = x - .5),
                 size = 5, colour = "black", shape = 15) +
  geom_nodepoint(aes(subset = node == 32, x = x - 2),
                 size = 5, colour = "gray", shape = 15)
4

1 回答 1

0

使用“ape”包的解决方案是:

library(ape)
mytree <- rtree(7) # A random tree
labels1 <- letters[1:6]
labels2 <- LETTERS[1:6]

plot(mytree)
# Setting location of label with `adj`
nodelabels(labels1, adj = c(1, -1), frame = 'none') 
# We could also use `pos =` 1: below node; 3: above node
nodelabels(labels2, pos = 1, frame = 'n')

绘图输出

您可能需要调整adj参数以根据需要设置位置。

由于我无法解析treetext您作为示例提供的对象(不平衡大括号),而且我不熟悉如何read.nhx()存储节点标签,您可能需要一点 R 代码来提取labels元素;您可以使用裸nodelabels()图来绘制树上节点的数量,以确保您的向量的顺序正确。

如果您希望标签出现在边缘而不是节点上,函数是ape::edgelabels().

于 2022-01-31T09:49:59.487 回答