系統樹をいろいろ描いてみる

MikuHatsune2012-01-19

系統樹を描きたい。
クラスタリングしてあみだくじがにょろにょろ伸びるタイプはいくらかやったことがあったが、円形にしたい。
ググッてみると「Rと系統樹(1)(2)」(それぞれPDF(1)(2))というものがあった。
Rヘルプも見てみたところ、phylogenetic関連の

library(ape)

というパッケージでできるようだ。
あみだくじクラスタリングプロットは距離行列を求めて作成されるので、距離行列を求めてphylogクラスに引数を変換すれば様々なクラスタリングプロットができるようだ。
plot.phylo関数には、プロットの仕方が
phylogram
cladogram
fan
unrooted
radial
の5通りあるらしい。
 

library(ape)

#サンプルデータの行、列数
nr <- 5
nc <- 7

#適当にサンプルデータの行列を作成する。
sample_data <- matrix(runif(nr * nc), nr=nr, nc=nc)
#距離行列を求める。
dist_data <- dist(sample_data)
#クラスタリングをする。
clust_data <- hclust(dist_data)
#classをphyloに変換する。
phylo_data <- as.phylo(clust_data)

#距離を反映させてプロットする。
par(mfrow=c(2, 3))
plot(phylo_data)
title("default")
plot(phylo_data, type="phylogram", cex=1.5)
title("phylogram")
plot(phylo_data, type="cladogram", cex=1.5)
title("cladogram")
plot(phylo_data, type="fan", cex=1.5)
title("fan")
plot(phylo_data, type="unrooted", cex=1.5)
title("unrooted")
plot(phylo_data, "radial", cex=1.5)
title("radial")

#距離を反映させずにプロットする。
par(mfrow=c(2, 3))
plot(phylo_data)
title("default")
plot(phylo_data, type="phylogram", cex=1.5, use.edge.length=FALSE)
title("phylogram, length FALSE")
plot(phylo_data, type="cladogram", cex=1.5, use.edge.length=FALSE)
title("cladogram, length FALSE")
plot(phylo_data, type="fan", cex=1.5, use.edge.length=FALSE)
title("fan, length FALSE")
plot(phylo_data, type="unrooted", cex=1.5, use.edge.length=FALSE)
title("unrooted, length FALSE")
plot(phylo_data, "radial", cex=1.5, use.edge.length=FALSE)
title("radial, length FALSE")