bootstrap value分段标记
想要分段标记bootstrap,比如0-70
, 70-90
, 90-100
之类的。这个对于ggtree来说,太简单。
首先我们要读树,用treeio
的read.newick
,它和read.tree
的不同之处是,加入了参数node.label
,当node.label
存的不是label
,而是bootstrap
等数字型的时候,你可以传入node.label='support'
,这样它会把node label解析为support value,另存为树注释数据,而不是和tip label混在一起。label变量只能存为字符型,因为和tip label混了,而字符型会让数字操作稍微复杂点。所以我们要用read.newick
。
tree <- read.newick("RMI.phy_phyml_tree_rooted_labeled.txt", node.label='support')
root <- getRoot(tree@phylo)
p <- ggtree(tree, color="black", size=1.5, linetype=1, ladderize=TRUE) +
ggtitle(label="Figure A") +
geom_tiplab(size=4.5, hjust = -0.060, fontface="bold") + xlim(0, 0.09)
首先用ggtree画出树的结构,用ggtitle加title,用geom_tiplab加tip label,出图如下:
然后我们就可以用geom_point2来打点了,我们要指定只打内部节点,但不打root node,因为root和外部节点都是没有值的。然后这个support值是数字型,我们想按区间分段,这太容易,用cut来切就可以了。这里的值是做了1000次的bootstrap。于是得到下面的图:
p <- p + geom_point2(aes(subset=!isTip & node != root,
fill=cut(support, c(0, 700, 900, 1000))),
shape=21, size=4) +
theme_tree(legend.position=c(0.2, 0.3))
已然是近乎完美,但我们仍需要修图,想用简单的颜色来填充,低值用白色,中间值用灰色,而高值用黑色。 label想除以1000,换成百分比,legend的名字想换成bootstrap百分值,legend的label想到数学公式表达区间,这些都可以在scale_fill_manual中实现:
p + scale_fill_manual(values=c("white", "grey", "black"),
guide='legend', name='Bootstrap Percentage(BP)',
breaks=c('(900,1e+03]', '(700,900]', '(0,700]'),
labels=expression(BP>=90,70 <= BP * " < 90", BP < 70))
华丽丽的图就产生了: