大数跨境

如何绘制漂亮的进化树?

如何绘制漂亮的进化树? SCIPainter
2026-11-03
0
导读:值得收藏!
推荐公众号奥智生物,分享前沿组学技术、实用生信技能、数据挖掘思路


之前,看到一个非常好看的进化树,如下图,一直记在心里!那么,如何绘制这样的进化树呢?当前,使用Ai绘图已经非常方便了,但“Ai得来终觉浅,绝知此事要躬行”!


下面就一起看下如何纯手工绘制吧!

01

数据准备


首先,准备示例进化树。大家可使用进化树构建软件(如MEGA)构建进化树,导出为Newick格式即可。我这里的示例进化树是直接使用 ape 包生成的随机树。


此外,也可以准备一个节点分组信息文件,如下图,第 1 列为节点标签,第 2 列为分组信息,第 3 列为节点大小数据。


02

图形绘制


#安装所需R包library(BiocManager)install(c("TreeAndLeaf","RedeR"))install("ggtree",force=TRUE)#加载所需R包library(TreeAndLeaf)library(RedeR)library(igraph)library(ape)library(ggtree)library(dendextend)library(dplyr)library(ggplot2)library(RColorBrewer)#读入系统发育树phylo_tree<-read.tree("NewickExport.nwk")str(phylo_tree)


#读入信息文件group.df<- read.csv("node_info.csv")#预览数据head(group.df)


#合并节点信息phylo_tree<-full_join(phylo_tree, group.df, by='label')#采用daylight布局生成ggtree对象tr <-ggtree(phylo_tree, linewidth =0.2, layout='daylight', branch.length='none')tr


#绘制ggtree,alpha设置透明度tr1 <- tr +geom_tippoint(aes(color = group, size = size),alpha=0.7)tr1


#自定义配色mycolor<-brewer.pal(8, "Set1")mycolor<-brewer.pal(8, "Pastel2")mycolor<-brewer.pal(8, "Paired")#也可手工指定半透明颜色#mycolor <- paste0(mycolor,"99")mycolor<-c("#B3E2CDee", "#FDCDACee", "#CBD5E8ee", "#F4CAE4ee","#E6F5C9ee", "#FFF2AEee", "#F1E2CCee", "#CCCCCCee")mycolor<-c("#A6CEE3aa", "#1F78B4aa", "#B2DF8Aaa", "#33A02Caa","#FB9A99aa", "#E31A1Caa","#FDBF6Faa", "#FF7F00aa")mycolor<-c("#E41A1C99", "#377EB899", "#4DAF4A99", "#984EA399","#FF7F0099", "#FFFF3399", "#A6562899", "#F781BF99")#自定义配色tr1 <- tr1 +scale_color_manual(values =mycolor)tr1


导出的效果图如下:



03

其他样式


#将ggtree对象转为tree-and-leaf对象tr2 <-treeAndLeaf(tr1)#向tree-and-leaf映射属性#注:refcol = 1 表示使用dat的第1列作为匹配IDtr3 <-att.mapv(g = tr2, dat=group.df, refcol=1)#通过att.setv封装函数设置图属性tr3 <-att.setv(g = tr3, from ="group", to ="nodeColor", cols =mycolor)tr3 <-att.setv(g = tr3, from ="size", to ="nodeSize", xlim=c(10, 50, 5))#通过att.addv、att.adde设置图属性tr3 <-att.addv(tr3, "nodeLabelSize", value =1)tr3 <-att.addv(tr3, "nodeLineWidth", value =0)tr3 <-att.addv(tr3, "nodeColor", value ="black", index=!V(tr3)$isLeaf)tr3 <-att.adde(tr3, "edgeWidth", value =3)tr3 <-att.adde(tr3, "edgeColor", value ="black")#启动RedeR界面startRedeR()resetRedeR()#将tree-and-leaf传入交互式 R/Java 界面addGraphToRedeR(g = tr3, zoom=50)


#选中内部节点,固定位置不参与松弛selectNodes(V(tr3)$name[!V(tr3)$isLeaf], anchor=TRUE)#运行松弛算法,微调叶节点relaxRedeR(p1=25, p2=200, p3=5, p5=5, p8=5)#添加图例addLegendToRedeR(tr3, type ="nodecolor", title="Group", stretch =0.2,position="topright")addLegendToRedeR(tr3, type ="nodesize", title="Size",position="bottomright")

调整满意后,即可保存为所需格式的图片,如下。


最终的绘图效果如下:

好啦,本次的进化树绘制教程就分享到这里啦!

*未经许可,不得以任何方式复制或抄袭本篇文章之部分或全部内容。版权所有,侵权必究。


图片
图片
# SCIPainter

基迪奥旗下绘图公众号

分享科研绘图技能与工具

欢迎关注与转发~


图片

你的好友拍了拍你

并请你帮她点一下“分享”~

【声明】内容源于网络
0
0
SCIPainter
“一图胜千言”,好看的图形千篇一律,丑的配图千奇百怪。SCIPainter,旨在分享科研绘图的技能与工具。不保证日更,有时间就做线上培训,不排除录制付费视频的可能。如果你想看我日更,请多把我分享出去,说不定我就文思如尿崩了。
内容 961
粉丝 0
SCIPainter “一图胜千言”,好看的图形千篇一律,丑的配图千奇百怪。SCIPainter,旨在分享科研绘图的技能与工具。不保证日更,有时间就做线上培训,不排除录制付费视频的可能。如果你想看我日更,请多把我分享出去,说不定我就文思如尿崩了。
总阅读13.1k
粉丝0
内容961