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 ggplotに回帰直線の式を表示する方法R ggplotに回帰直線の式を表示する方法 R言語のggplotにおいて、グラフに回帰直線の式を表示する方法をお伝えします。 ggplotのグラフに回帰直線の式を表示する方法はいくつかあります。 ここでは最も簡単と思われるggpmiscパッケージを用いて回帰直線の式を表示する方法をお伝えします。 環境 今回の作業環境をsessionInfo()関数で確認しておきます。 > […]
  • R knitrできれいな多重クロス集計をPDFで出力する方法R knitrできれいな多重クロス集計をPDFで出力する方法 knitrパッケージのkable関数を使えば、matrixやdata.frameなどの表形式をきれいに出力してくれるが、ftable関数を用いた多重クロス集計の結果は、kable関数を使うことができない。 これは非常に残念なので、他の方法できれいに出力する方法をお伝えする。ちなみにこの方法ではPDF出力のみの対応となるので注意してほしい。 手順を簡単に説明すると、 […]
  • これだけは抑えておきたい安全性分析の基本これだけは抑えておきたい安全性分析の基本 安全性分析とは、主に貸借対照表上の数値から支払能力を測定する分析である。企業が倒産する主な原因は資金不足によって起こるため、様々な観点から資金の状況を把握する必要がある。 ここでは、安全性分析の代表的な指標をいくつか紹介する。 流動比率 流動比率とは、1年以内に資金化できる流動資産と1年以内に返済しなければならない流動負債との比率から支払能力をみる指標である。 […]
  • R言語 CRAN Task View:欠損データR言語 CRAN Task View:欠損データ CRAN Task View: Missing Dataの英語での説明文をGoogle翻訳を使用させていただき機械的に翻訳したものを掲載しました。 Maintainer: Julie Josse, Nicholas Tierney, Nathalie Vialaneix (r-miss-tastic […]
  • R言語 CRAN Task View:社会科学の統計R言語 CRAN Task View:社会科学の統計 CRAN Task View: Statistics for the Social Sciencesの英語での説明文をGoogle翻訳を使用させていただき機械的に翻訳したものを掲載しました。 Maintainer: John Fox Contact: jfox at […]
ggplot2を用いて階層的クラスタリングの結果を可視化する方法