如何在删除叶子节点后一致地绘制一棵树?

3
想象一下,我有一棵树(或者是一个树形图)
require(ape)
fulltree <- rtree(n=50, br=NULL)

...然后我删除了一些提示

prunetree <- drop.tip(fulltree,node=5)

如果我绘制修剪后的树,R会重新调整它,只考虑剩下的叶子节点。

par(mfrow=c(1,2))
plot(fulltree, type="fan")
plot(prunetree, type="fan")

但是这样做会让我们很难确定树的哪一部分现在已经丢失。

有没有一种简单的方法可以将剪枝后的树以与完整树相同的比例/排列方式等方式绘制出来,以便剩余分支中没有任何一个部分看起来移动?(在这个例子中,我会得到某种吃豆人形状而不是一个完整的圆形)我想这可以通过将分支涂成白色或浅灰色来实现。如果有人想要制作正在失去顶端的树的动画,这将非常有用。

2个回答

1
这样做的问题就像你所说的那样,数据被从新树中移除,因此被重新缩放。为了解决这个问题,最好是为所需的叶子节点绘制一个新颜色的树。我们可以使用优秀的包ggtree(还有其他方法)来实现这一点。
set.seed(1234)

library(ggtree)
library(gridExtra)

fulltree <- rtree(n=10, br=NULL)
col <- rep(1, 2*fulltree$Nnode + 1)
col[5] <- 10

grid.arrange(ggtree(fulltree, layout = "fan") + geom_text(aes(label=label)),
             ggtree(fulltree, col = col, layout = "circular") + geom_text(aes(label=label)))

enter image description here

实际上的着色来自于 col[5] <- 20:将 col[5] 更改为您想要的剪头颜色,将 20 更改为您想要的颜色。

谢谢。我在考虑选择多个任意的提示,并将它们连接的分支也着色。请看我的回答。 - Mammoth

1
感谢jeremycg提供的ggtree提示。我认为这更符合我的需求。
require(ape)
library(ggtree)
library(gridExtra)
library(ggplot2)

set.seed(1234)

fulltree <- rtree(n=50, br=NULL)

#These are the tips to drop
prunetips <- c("t41","t44","t42","t8")

#But get the tips to keep
keeptips <- fulltree$tip.label[!fulltree$tip.label %in% prunetips]

#Group the tips to keep
prunetree <- groupOTU(fulltree, focus=keeptips)

#And plot
ggtree(prunetree, layout="fan", aes(color=group))+
scale_color_manual(values=c("lightgrey","black"))+
geom_tiplab()

Tree with pruned tips


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接