R言語のggplot2パッケージを用いて階層的クラスタリングの結果を可視化する方法についてお伝えいたします。

一般に、階層的クラスタリングの結果は、デンドログラムまたは樹形図として可視化されます。
ggplot2パッケージには、デンドログラムまたは樹形図を可視化する機能が備わっておりません。
しかし、ggplot2パッケージと合わせてggdendroパッケージを用いれば、ggplot2にデンドログラムまたは樹形図を可視化できる機能が追加されます。

ここでは、このggdendroパッケージの機能について見ていくことにします。
サンプルデータは、Rに組み込まれているPlantGrowth(植物の成長の実験からの結果)を用いることにします。


> data(PlantGrowth)
> str(PlantGrowth)
'data.frame':	30 obs. of  2 variables:
 $ weight: num  4.17 5.58 5.18 6.11 4.5 4.61 5.17 4.53 5.33 5.14 ...
 $ group : Factor w/ 3 levels "ctrl","trt1",..: 1 1 1 1 1 1 1 1 1 1 ...

また、予めggplot2とggdendroを読み込んでおきます。


library(ggplot2)
library(ggdendro)

ggdendrogram関数を用いる方法

階層的クラスタリングの結果をすぐに可視化するにはggdendrogram関数を用いるのが便利です。
ggdendrogram関数の引数は次になります。

引数 説明
data hclust関数の結果やdendroオブジェクトなど
segments セグメントの線を描画するかどうか
labels セグメントのラベルを描画するかどうか
leaf_labels リーフラベルを描画するかどうか
rotate 図を90度回転させるかどうか
theme_dendro ブランクテーマを適用するかどうか

h <- hclust(dist(PlantGrowth$weight))
ggdendrogram(h, segments = TRUE, labels = TRUE, leaf_labels = TRUE, rotate = FALSE, theme_dendro = TRUE)

dendro_data関数を用いる方法

dendro_data関数は、階層的クラスタリングの結果をggplot2で扱えるように変換します。
そのため、描画の方法はggplot2を通して行われるため、柔軟な設定が可能となります。

dendro_data関数の引数は次になります。

引数 説明
model stats::hclust()やstats::dendrogram()、tree::tree()の結果
type 「rectangle」または「triangle」を指定。それぞれ、セグメントの線を四角形または三角形で描画する

h <- hclust(dist(PlantGrowth$weight))
d <- as.dendrogram(h)
dd <- dendro_data(d, type = "rectangle")

g <- ggplot(segment(dd))
g <- g + geom_segment(aes(x = x, y = y, xend = xend, yend = yend))
plot(g)

タイトルやx軸ラベル、y軸ラベルの描画や、図を回転させるなどは、ggplot2の機能を用いて表すことができます。
例えば、サンプルデータPlantGrowthの列groupごとに色を分けるときは、次のようになります。


library(tidyverse)

h <- hclust(dist(PlantGrowth$weight))
d <- as.dendrogram(h)
dd <- dendro_data(d, type = "rectangle")
dd$labels <- dd$labels %>%
  left_join(PlantGrowth %>% add_rownames("x") %>% mutate(x = as.numeric(x)), by = "x")
  

g <- ggplot(segment(dd))
g <- g + geom_segment(aes(x = x, y = y, xend = xend, yend = yend))
g <- g + geom_text(data = dd$labels, aes(x, y, label = label, color = group), hjust = 1, angle = 90)
g <- g + ylim(-0.3, 3)
plot(g)

簡単に補足しますと、dendro_data関数の結果のlabelsデーターフレームに、元のPlantGrowthを結合し、geom_text関数にこの結合されたlabelsデータフレームのgroupを色分けに用いております。

関連する記事

  • R,knitPDF bxjsarticleを用いた際にサブタイトルでエラーが出る場合の対処法 RStudioを用いてRmdファイルから日本語PDFを作成する際に、ドキュメントクラスをbxjsarticleと設定すると、次のようなエラーが出てPDFファイルが作成されない。 エラーは、subtitleコマンドが二重に定義されているために起こっているようだ。 ! LaTeX Error: Command \subtitle already defined. Or […]
  • Python pyqueryを用いて簡単にウェブスクレイピングPython pyqueryを用いて簡単にウェブスクレイピング Pythonでpyqueryパッケージを用いて、ウェブスクレイピングを行う方法をご紹介する。ウェブ上には様々なデータがあるが、必要なデータがいつもファイルとしてダウンロードできるとは限らない。ここでご紹介する方法は、htmlファイルを直接解析して、必要な情報を取得するという方法である。 それでは、さっそく見ていこう。 Ubuntu […]
  • RaspberryPi Bluetoothスピーカーとの接続を維持する方法 Bluetoothスピーカーと接続していても、音を出していないとBluetoothスピーカー側がスリープモードに入り、必要な時に音が出ない場合がある。ここでは、Bluetoothスピーカーとの接続が切れないようにする方法をお伝えする。 アイディアはとても簡単で、ある一定時間ごとに無音のサウンドを出力し続けることにより、Bluetoothスピーカーとの接続を維持する。 […]
  • 度数分布表とヒストグラム度数分布表とヒストグラム 数値データの集合をただ眺めても、そのデータの特徴をつかむのは大変難しい。しかし、そのデータを表にまとめたもの、またはグラフにすると一目瞭然だ。特に、グラフにしたものは、大変分かりやすい。表にまとめたものを度数分布表、グラフにしたものをヒストグラムという。 では、早速具体的に見ていく。 度数分布表 度数分布表とは、以下の表のことを言う。ここで用いたデータは、統計Rに付 […]
  • Ubuntu apt-getでRがアップデートできない場合の対処法Ubuntu apt-getでRがアップデートできない場合の対処法 apt-getコマンドでRがアップデートできない理由はいくつか考えられる。ここでは、アップデートできない原因別に対処法をお伝えする。 接続できない 「apt-get […]
ggplot2を用いて階層的クラスタリングの結果を可視化する方法