0

我已经对齐了类中的序列phyDat。这是一个最小的例子:

library(seqinr)
seqs <- DNAMultipleAlignment( c(a1 = "------ATGTTCATTAACCGCTGACTATTCTCAACCA",
                                a2 = "------ATGTTCACCGACCGCTGACTATTCTCTACAA",
                                a3 = "---GTGACCTTCATCAACCGATGATTATTCTCAA---",
                                a4 = "---TCAGTCGTCACCAGGCGTTG-CAGGACCCGAC--",
                                a5 = "ATGGGGGTCTTCCTCA-TCGCCGTCGCCGCGT-----"))

library(phangorn)
phyDat_seqs <- as.phyDat(seqs)

我按照phangorn 包的手册构建了系统发育树。(下面我写了一个简化的代码,不用查手册,直接运行代码即可。)

dm <- dist.ml(phyDat_seqs)
treeNJ <- NJ(dm)

fit <- pml(treeNJ, data=phyDat_seqs)
fitGTR <- optim.pml(fit, model="GTR")

bs <- bootstrap.pml(fitGTR, bs=5, optNni=TRUE) 

我可以简单地绘制这棵树plotBS

plotBS(fitGTR$tree, bs, type="p")

到目前为止没有问题。我的问题从这一点开始

我想通过使用ggtree包来自定义这棵树,但我不知道该怎么做。当我使用ggtree(fitGTR$tree)时,它给了我一棵不同的树。

plotBS以某种方式使用bs值来更改树分支。如果你比较plot(fitGTR$tree, type="p")plotBS(fitGTR$tree, bs, type="p")差异很容易看出。ggtree()plot()构建相同的树,但不是我要自定义的树。

我尝试了不同的方法,例如使用write.treewrite.nexus函数保存树并使用包函数再次调用文件,ggtree但我无法保存plotBS树的版本。如何获得plotBS树的输出?

先感谢您。

4

1 回答 1

1

出现问题是因为我误读了文档。我在这一行犯了一个错误:

plotBS(fitGTR$tree, bs, type="p")

树必须通过midpoint()函数构造。因此,当我这样更改行时:

plotBS(midpoint(fitGTR$tree), bs, type="p")

没有问题发生。我可以使用ggtree并且可以毫无问题地保存/写入树数据。

即使我无法弄清楚midpoint()实际上树的作用是什么(您可以对此发表评论),问题也解决了。

于 2018-04-08T15:39:11.200 回答