ggdendro
を試しに走らせてます。なおこの内容はggdendro
のvignetteの内容をベースに作成しています。
ggdendro
パッケージはggplot
を使ってデンドログラムや樹形図を描かせるパッケージです。基本関数ggdendrogram()
では、出力オブジェクトはggplot
クラスで返してきます。
まずはパッケージを読み込みます。
library(ggplot2)
library(ggdendro)
基本形として、以下のシンプルなものを実行してみましょう:
hc <- hclust(dist(USArrests), "ave")
ggdendrogram(hc, rotate = FALSE, size = 2)
rotate
オプションは縦・横を切り替えます。
hc <- hclust(dist(USArrests), "ave")
ggdendrogram(hc, rotate = TRUE, size = 2)
シンプルに描くならこれでもOKです。
dendro_data()
関数を使ったデンドログラム・プロットデータの活用このパッケージにはdendro_data()
という関数が組み込まれており、dendrogramクラスのオブジェクトからセグメントデータやラベルデータのリストを作成してくれます。これを用いることでggplot
関数で簡単にデンドログラムなどを描けます。
まずはdendro_data()
で生成したsegmentデータを使って描きます:
# 分析実施
hc <- hclust(dist(USArrests), "ave")
# 分析結果をdendrogramクラスとします
dhc <- as.dendrogram(hc)
# 分析結果を使えるようにする
# type="rectangle で直角タイプです
ddata <- dendro_data(dhc, type = "rectangle")
# ggplot()でグラフ化。segment()でセグメント情報(棒のデータ)を取得
p <- ggplot(segment(ddata)) +
geom_segment(aes(x = x, y = y, xend = xend, yend = yend)) +
coord_flip() +
scale_y_reverse(expand = c(0.2, 0))
p
segmentデータしか使ってないので棒だけです。なお、ggplot
でそのまま描くと灰色とか見難くなります。そこで以下の内容を追加するとスッキリします:
# coord_flip()で横向きに、theme_dendro()で真っ白にします
p +
coord_flip() +
theme_dendro()
なお、直角タイプではなく三角タイプのデンドログラムにもできます:
ddata <- dendro_data(dhc, type = "triangle")
ggplot(segment(ddata)) +
geom_segment(aes(x = x, y = y, xend = xend, yend = yend)) +
coord_flip() +
scale_y_reverse(expand = c(0.2, 0)) +
theme_dendro()
tree
パッケージ内のtree()
関数のプロットデータにも対応しています。
require(tree)
## Loading required package: tree
data(cpus, package = "MASS")
# 分析の実行とデンドロデータ作成
cpus.ltr <- tree(log10(perf) ~ syct + mmin + mmax + cach + chmin + chmax, data = cpus)
tree_data <- dendro_data(cpus.ltr)
# ggplotへ。
ggplot(segment(tree_data)) +
# 棒の設定。sizeで太さを、alphaで透明度
geom_segment(aes(x = x, y = y, xend = xend, yend = yend, size = n),
colour = "blue", alpha = 0.5) +
scale_size("n") +
# 分岐のテキスト(ラベル)設定。データはlabel()で持ってこれます。sizeで文字サイズ。
geom_text(data = label(tree_data),
aes(x = x, y = y, label = label), vjust = -0.5, size = 3) +
# 葉っぱのテキスト設定。
geom_text(data = leaf_label(tree_data),
aes(x = x, y = y, label = label), vjust = 0.5, size = 2) +
# 軸や背景除去
theme_dendro()
rpart
パッケージのrpart()
関数のプロットデータにも対応しています。
library(rpart)
# 分析実行
fit <- rpart(Kyphosis ~ Age + Number + Start,
method = "class", data = kyphosis)
# デンドロデータへ
fitr <- dendro_data(fit)
# ggplotへ
ggplot() +
# 棒の設定。デンドロデータから直接segmentsを指定
geom_segment(data = fitr$segments,
aes(x = x, y = y, xend = xend, yend = yend)) +
geom_text(data = fitr$labels,
aes(x = x, y = y, label = label), size = 3, vjust = 0) +
geom_text(data = fitr$leaf_labels,
aes(x = x, y = y, label = label), size = 3, vjust = 1) +
theme_dendro()
以上です。