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 文字列ベクトルで文字列を指定して要素を削除する方法R 文字列ベクトルで文字列を指定して要素を削除する方法 Rの文字列ベクトルで、文字列を指定して要素を削除する方法をお伝えする。 通常、ベクトルの要素を削除する場合は、次のように添字にマイナスを付加して削除する。 > s # 1番目の要素を削除 > s[-1] [1] "猫である。" "名前は" "まだ無い。" > # 1番目から2番目の要素を削除 > s[-1:-2] [1] "名前は" […]
  • 相関係数相関係数 相関係数とは2変量のデータ間の関係性の強弱を計る統計学的指標である。相関係数rがとる値の範囲は-1≦r≦1である。相関係数rの値により以下のように呼ばれる。 -1≦r<0ならば負の相関 r=0ならば無相関 0<r≦1ならば正の相関 一般的に、強弱も合わせて以下のように呼ばれる。 […]
  • matplotlibで箱ひげ図を表示する方法matplotlibで箱ひげ図を表示する方法 Python3でmatplotlibを用いて、箱ひげ図を表示する方法をお伝えする。 Ubuntu14.04環境で動作することを確認している。 一つ注意点として、日本語に対応させるために、ここでは「IPAexGothic」を用いている。 import matplotlib as mpl import matplotlib.pyplot as […]
  • アンケートの自由記述からニーズを抽出する方法アンケートの自由記述からニーズを抽出する方法 アンケートは様々な場面で有効活用されていると思うが、特に、「年齢」などの数量回答や、「男性・女性」、「満足度の5段階評価」などの単一回答、「購入動機を3つまで回答してください」などの複数回答は、集計や分析がしやすいため、重点的に活用していることだろう。 回答者の立場で考えると、数量回答・単一回答・複数回答は、設問者からの問いかけに対し、返答があらかじめ用意されていること […]
  • 経営戦略に使えるABC分析の基礎知識と活用法経営戦略に使えるABC分析の基礎知識と活用法 ABC分析は売上に関する経営戦略を立てるうえで、最も基本となる分析手法である。ABC分析とは、販売管理、顧客管理で使われる分析の一つで、ある期間で対象を重要度によって分類することにより現状を把握し易くする分析手法だ。 それでは早速解説していく。 ABC分析の手順 期間を過去一年間、対象を商品、重要度を売上とした場合を例に取り、ABC分析を行う手順を説明していく。 […]
ggplot2を用いて階層的クラスタリングの結果を可視化する方法