我在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)
我跟着manual of phangorn package构建了一个系统发育树。 (下面,我写了一个简化的代码。你不需要检查手册,你可以直接运行代码。)
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.tree
或write.nexus
函数保存树,并使用ggtree
包函数再次调用该文件,但我无法保存{{1}树的版本。如何获得plotBS
树的输出?
提前谢谢。
答案 0 :(得分:1)
问题出现了,因为我误读了文档。我在这一行上犯了一个错误:
plotBS(fitGTR$tree, bs, type="p")
树必须通过midpoint()
函数构建。因此,当我改变这条线时:
plotBS(midpoint(fitGTR$tree), bs, type="p")
没有问题发生。我可以使用ggtree
,我可以毫无问题地保存/写入树数据。
即使我无法弄清楚midpoint()
函数对树实际做了什么(你可以对此发表评论),问题也解决了。