生物进化树基本理论指出所有的生物都可以追溯到共同的祖先,生物的产生和分化就像树一样地生长、分叉,以树的形式来表示生物之间的进化关系是非常自然的事。可以用树中的各个分支点代表一类生物起源的相对时间,两个分支点靠得越近,则对应的两群生物进化关系越密切。其中分支又包括直系同源和旁系同源具体含义如下:
直系同源(orthologs): 同源的基因是由于共同的祖先基因进化而产生的;旁系同源(paralogs): 同源的基因是由于基因复制产生的。(源自Fitch, W.M.)
接下来我们看下进化树中的术语:
我看了一些对单系类群,并系类群以及多系(复系)类群的解释,都快看晕了。我还是用我的语言总结一下吧。比如我们人类只有一层后代那就是人,没有其他的物种这就是单系类群;那么如果人类同时分支出了人、智人、机器人等等但是有一个共同的祖先人类,那么这些就组成了并系类群;那如果猿类中的猩猩算为和人同源那么他们就组成了复系类群。还有其他的内类群、外类群、姐妹群,我们就不再去赘述了。
以上这些都可以反映在进化树中,进化树又分为无根树和有根树(外群可以用来确定树根)。其拓扑数目的计算如下:
图中的m指的类群的数目。
进化树的计算方法有很多包括了Fitch-Margoliash (FM)法、Neighbors-Joining (NJ/邻接)法、Neighbors Relation (邻居关系)法、Unweighted Pair Group (UPGMA)法。
我们今天利用R语言自带的聚类函数进行进化树的构建,同时利用R包ape实现进化树的可视化展示。
我们利用R自带的数据集mtcars构建树;
hc =hclust(dist(mtcars))#其中dist是密度处理函数,这个是需要的加进去的。
默认的树图绘制很简单直接plot(hc)如下图:
接下来我们介绍下ape这个包:
其主要的画图函数主要基于as.phylo类的plot函数。
绘图实例:
plot(as.phylo(hc), type = "cladogram", cex = 0.9,label.offset = 1)
plot(as.phylo(hc), type = "unrooted")
plot(as.phylo(hc), type = "fan")
plot(as.phylo(hc), type = "radial")
是不是觉得有点太素了,我们可以通过调整plot中的参数控制所有的线颜色以及文字颜色。
我们截取进化树的前五代进行一个彩色的实例演示如下:
clus5 = cutree(hc, 5)
mypal = c("#556270","#4ECDC4", "#1B676B", "#FF6B6B","#C44D58")
plot(as.phylo(hc), type = "fan",tip.color = mypal[clus5], label.offset = 1, cex = log(mtcars$mpg, 10), col ="red")
总结,如果大家想让自己的图更加炫酷,那么就需要动点脑子把参数改的完美点,当然你的图自然就完美了。