前几天我们构建了进化树,下一步就是对进化树进行可视化或者编辑注释。对进化树进行可视化的工具有很多,比如iTOL, Evolview等在线工具。但是不得不说,ggtree是一个非常强大的R包,完美继承了ggplot的图层加注释的模式。
基本可视化的内容就不做详细介绍了,可以看文末推荐的博客。主要介绍一下常用的注释语法。
如何绘制带有支持率的进化树
##tree view#############################安装###if (!requireNamespace("BiocManager", quietly = TRUE))#("BiocManager")#BiocManager::install("ggtree")library(ggplot2)library(ggtree) library(treeio)##读取newick格式树文件tree1 "RAxML_bipartitions.result", = ##基础绘图,默认布局是rectangular,即常见的phylogram树状图ggtree(tree, size=1.0) + xlim(0,0.45) + ##x轴的范围 geom_text2(aes(label=support,hjust=-0.1),size=3)+ ##添加注释信息--支持率 geom_treescale() + theme_tree2()+ theme( = "right")
如果不需要展示枝长/绘制其他类型的树/绘制节点的大小,颜色等
##不展示枝长ggtree(tree, layout="rectangular",branch.length = "none") +#geom_tiplab(size=3, hjust=-0.1) + ##设置末端tip标签,hjust调整左右距离geom_tippoint(size=1, color="firebrick") + ##设置末端tip点的大小及颜色geom_nodepoint(color="orange", alpha=1/4, size=2) + ##设置中间节点node的大小及颜色geom_text2(aes(label=support,hjust=-0.1),size=3)+ theme( = "right")
##绘制圈图ggtree(tree, layout="fan",branch.length = "none") +#geom_tiplab2(size=3, hjust=-0.2) + ##设置末端tip标签,hjust调整距离 geom_tippoint(size=1, color="firebrick") + ##设置末端tip点的大小及颜色 geom_nodepoint(color="orange", alpha=1/4, size=2) + ##设置中间节点node的大小及颜色 geom_text2(aes(label=support,hjust=-0.1),size=3)+ theme( = "right")##layout其他选项ggtree(tree, layout="slanted") ggtree(tree, layout="circular") ggtree(tree, layout="circular",branch.length = "none") ggtree(tree, layout="fan", open.angle=160) ggtree(tree, layout="equal_angle") ggtree(tree, layout="daylight") ggtree(tree, layout="daylight",branch.length = "none")
很多情况下,我们会想要修改末端分类单元的信息,比如说,可能想要加上物种名,或者采样地点,此时可以借助软件包,这个真的好用!
需要准备好样本注释文本
##修改末端标签,即样本名称tr "RAxML_bipartitions.result", = map "", header = T)> head(map) samples rename species places1 010502-1 Detian02_1 Detian2 010502-3 Detian02_3 Detian3 0923-S1 Jianfeng_S1 Jianfeng4 0923-S2 Jianfeng_S2 Jianfeng5 0923-S3 Jianfeng_S3 Jianfeng6 0923-S4 Jianfeng_S4 Jianfeng#创建一个tip lable的数据框,列名为samplesdf tr@phylo$) d map, by =dtree1 tr) % xlim(NA, 0.45) + geom_tiplab(aes(label=paste0('italic(', rename, ')~bolditalic(', species, ')')), size=3, parse=T)+ geom_text2(aes(label=support,hjust=-0.1),size=3)+ geom_treescale() + theme_tree2()+ theme( = "right")tree1
(我就不放图了)
突出某一节点或者分支
#1 添加bootstrap值区间和节点标签p1 0. geom_point2(aes(subset=!isTip),fill="red",shape=21,size=1.5) + scale_color_gradient(high='red', low='darkgreen') + theme(='right')p1#2: 给指定节点的clade添加标签p1 + geom_cladelabel(node=74,label="A",barsize = 1,color="blue")+ geom_cladelabel(node=97,label="B",barsize = 1,color="orange")+ geom_cladelabel(node=93,label="C",barsize = 1,color="green")#3:高亮指定节点所对应的区域p1 + geom_hilight(node=74,fill = "blue",alpha = 0.6)+ geom_hilight(node=97,fill = "orange",alpha = 0.6) + geom_hilight(node=93,fill = "green",alpha = 0.6)#4:在两个节点之间添加线段和标记p1 + geom_strip(100,93,barsize = 2,color="red",label="B+C")
折叠某一分支
#5:节点折叠node 105collapse(p1, node, 'max') %>% expand(node)collapse(p1, node, 'min') %>% expand(node)collapse(p1, node, 'mixed') %>% expand(node)#多个节点一起collapse(p1, 105, 'max', fill='steelblue', alpha=.4) %>% collapse(75, 'max', fill='firebrick', color='blue')scaleClade(p1, 105, .2) %>% collapse(75, 'max', fill="darkgreen")
因为中间节点加了形状和颜色,整体有点杂乱,也就不修改了。
最后一个比较花的,根据分组信息来添加颜色
##添加物种分组信息tree "RAxML_bipartitions.result", = map "", header = T, = groupInfo split((tree2 ggtree(tree2, layout="fan",branch.length="none", aes(color=group)) + #geom_tiplab(size=3, hjust=-0.05) + geom_text2(aes(label=support,hjust=-0.5),size=2.5) theme( = "right")dev.off()
我比较常用的差不多就这些了,因为实验原因,省略了tip名称和图例。
更多详细请查看:
作者余光创博士的博客
/2015/11/to-achieve-the-visualization-and-annotation-of-evolutionary-tree-using-ggtree
/2018/04/rename-phylogeny-tip-labels-in-treeio/
其他博主的介绍
/2020/04/30/5eaa3f6c22804/
/?mod=space&uid=255662&do=blog&id=969228
/js9fda2b82cedb/