系統樹 ape ade4

系統樹データの読み込み

系統樹のデータは、newick フォーマット(サンプル)や nexus フォーマット(サンプル)などの形式で保存される。R でこれらのフォーマットを読み込んで、系統樹を描くとき ape や ade4 パッケージ等が利用される。ape と ade4 を利用するとき、予めインストールする必要がある。

install.packages("ape", dependencies = TRUE)
install.packages("ade4", dependencies = TRUE)

ape パッケージを利用して読み込む

ape パッケージの read.tree 関数を利用してファイルを読み込む例。read.tree 関数は newick と nexus の両方のフォーマットに対応する。

library(ape)

# newick フォーマットの読み込み
nw <- read.tree("http://stat.biopapyrus.net/data/newick-format.txt")

# nexus フォーマットの読み込み
nx <- read.nexus("http://stat.biopapyrus.net/data/nexus-format.txt")

読み込んだファイルを別名で保存できる。newick フォーマットで保存する場合は write.tree を、nexus フォーマットで保存する場合は write.nexus を利用する。

# データの読み込み
tree <- read.tree("http://stat.biopapyrus.net/data/newick-format.txt")

# データの書き込み
write.tree(tree, file="new.tre")    # newick フォーマット
write.nexus(tree, file="new.nex")   # nexus フォーマット

ade4 パッケージを利用して読み込む

ade4 パッケージは newick フォーマットの読み込みをサポートしている。次のように、newick2phylog 関数を利用して読み込む。

library(ade4)

# ファイルを直接に読み込むとエラーが起こる
tree <- newick2phylog("http://stat.biopapyrus.net/data/newick-format.txt")
## Error in complete(x.tre) : ';' not found

# ファイルを 1 行ずつ読んで、 newick2phylog で変換
fh <- file("http://stat.biopapyrus.net/data/newick-format.txt", "r")
tree <- newick2phylog(readLines(fh, 1))

ape を利用した系統樹作成

read.tree で読み込んだデータを plot 関数に与えるだけで、系統樹を作成できる。

library(ape)
tree <- read.tree("http://stat.biopapyrus.net/data/newick-format.txt")

plot(
  tree,                    # read.treeで読み込んだデータ
  type = "phylogram",      # phylogram, cladogram, fan, unrooted, radial を指定することができる
  use.edge.length = TRUE,  # FALSE を指定すると、枝の長さは距離情報を含まなくなる!
  show.tip.label = TRUE,   # 葉のラベルを表示する
  show.node.label = TRUE,  # ノードのラベルを表示
  edge.color = "black",    # 枝の色
  edge.width = 1,          # 枝の太さ
  edge.lty = 1,            # 枝の種類(実線、点線など)
  root.edge = TRUE,        # 根を表示する
  tip.color = "black"      # 葉の色
)

type 引数に系統樹のタイプを指定する。各タイプは次のようになっている。

apeパッケージで描ける系統樹のタイプ

各枝にラベルを付ける場合は edgelabels を利用する。次は、各枝に距離情報を付ける例である。距離情報は tree$edge.length に保存されている。

# Sample 1
plot(tree, main = "Sample 1")
edgelabels(
  text = tree$edge.length,    # 各枝に距離数値を付けます
  frame = "none",             # デフォルトでは"rect"となり、長方形の枠線が書かれる
  bg = "none",                # 背景色、デフォルトは緑色になる    
  col = "darkgray",           # ラベル文字の色
  adj = c(0, 1.2)             # ラベルの位置の調整
)


# Sample 2
# 最後の枝のみに距離情報をつける場合
plot(tree, main = "Sample 2")

# 葉を持つ枝を特定して距離情報を代入する
lastEdgeLabel <- tree$edge.length * as.numeric(tree$edge[,1] > tree$edge[,2])
lastEdgeLabel <- ifelse(lastEdgeLabel == 0, NA, lastEdgeLabel)
lastEdgeLabel[1] <- tree$edge.length[1]
edgelabels(lastEdgeLabel, frame="none", bg="none")
apeパッケージで描ける系統樹のタイプedgelabelによる枝にラベルをつける

各ノードにラベルをつける場合は nodelabels を利用する。

plot(tree)
nodelabels(
  frame = "none",             # デフォルトでは"rect"となり、長方形の枠線が書かれる
  bg = "none",                # 背景色、デフォルトは緑色になる    
  col = "black"               # ラベル文字の色
)

横軸に目盛りを付ける場合は axisPhlyo を利用する。また、横軸の目盛りの他に、スケールバーを付け加える場合は add.scale.bar を利用する。

# ノードが右上がりになるようにソート(逆はright = FALSEを指定)
tree.sort <- ladderize(tree, right = TRUE)

plot(tree.sort, type = "phylogram")

# 横軸の追加
axisPhylo()

# スケールバーの追加
add.scale.bar(length=0.05)
apeパッケージで描ける系統樹のタイプ距離情報に応じてソーティング

add.scale.bar をそのまま利用すると、スケールバーが系統樹と重なる。そこで、以下のように位置を調整して用いると、綺麗になる。

plot(tree, y.lim = c(-0.5, tree$Nnode + 1))
add.scale.bar(x=0, y = 0, length = 0.05)
apeパッケージで描ける系統樹のスケールバーの位置を調節

ade4 を利用した系統樹作成

ade4 パッケージを利用して系統樹を作成する例。

# ade4パッケージの利用
library(ade4)
fh <- file("http://stat.biopapyrus.net/data/newick-format.txt", "r")
tree <- newick2phylog(readLines(fh, 1))

plot(
  tree,              # newick2phylogで読み込んだデータ
  cleaves = 1,       # 葉っぱを示す円のサイズ,ゼロを指定すると非表示
  cnodes = 1,        # ノードに描く円のサイズ,ゼロを指定すると非表示
)
ade4パッケージで描いた系統樹