LoginSignup
2
6

More than 3 years have passed since last update.

Rのsuperheatで色々なヒートマップを描く(クラスタリングやグラフ付加)

Posted at

Rのライブラリ「superheat」について簡単にまとめてみました。
このライブラリは、ヒートマップをきれいに描けるだけでなく、簡単なクラスタリングができたり、グラフや階層構造の図を併せて描くことができたりします。

※本家のドキュメントを参考にさせて頂きました。
https://rlbarter.github.io/superheat/index.html

使用パッケージについて

「superheat」パッケージをインストールして読み込みます。

R
install.packages("superheat")
library(superheat)

通常のヒートマップを描画する

superheat関数へ、ヒートマップ化対象のデータを渡して実行します。
titleでタイトル指定、title.sizeで文字サイズを指定できます。

R
superheat(mtcars, 
          title="superheat sample",
          title.size=6)

image.png

スケーリングする

scaleTRUEを指定することで、スケーリングができます。

R
superheat(mtcars, scale=TRUE)

image.png

ソートする

行/列でソートする

pretty.order.rowsまたはpretty.order.colsTRUEを指定することで、行または列方向のソートができます。

R
superheat(mtcars, scale=TRUE
          pretty.order.rows=TRUE,
          pretty.order.cols=TRUE)

image.png

カラム指定でソートする

order.rowsまたはorder.colsへ、行または列の各要素名を並べ替えた配列を指定することでソートができます。

R
superheat(mtcars, scale=TRUE
          order.rows=order(mtcars$mpg)) #行方向をmpgで並べ替え

image.png

カラーマップを指定する

カラーパレットで指定する

heat.col.schemeに、カレーパレット文字列を指定します。
指定できる種類は、"red", "green", "blue"などです。(デフォルトは"viridis")

R
superheat(mtcars, scale=TRUE,
          heat.col.scheme="blue")

image.png

任意の色で指定する

最小、中間、最大の色が指定できます。

R
superheat(mtcars, scale=TRUE,
          heat.pal=c("blue", "white", "red"))

image.png

クラスタリング

デンドログラム(階層構造の分類)

row.dendrogramまたはcol.dendrogramTRUEを指定することで、行または列方向に対し、デンドログラムによるクラスタリングができます。

R
superheat(mtcars, scale=TRUE,
          row.dendrogram=TRUE)

image.png

クラスタリング(k-means法)

n.clusters.rowsまたはn.clusters.colsへ「クラス数」を指定することで、行または列方向に対し、k-means法によるクラスタリングができます。

R
superheat(mtcars, scale=TRUE,
          n.clusters.rows=3,

          #ラベルに元々の行名を表示する
          #(これを指定しない場合は「クラス番号」のみが表示される)
          left.label="variable") 

image.png

ヒートマップへグラフを付加する

行/列方向の集約したデータをプロットしたグラフを、ヒートマップの右や上へ追加することができます。
ここでの注意点は、プロットするデータは、ヒートマップのどちら側か(右か上か)により、データ数を行数または列数と揃える必要があります。

ヒートマップ右側へグラフを付加する

yrへプロットしたいデータを指定します。ヒートマップの「行数」と同一数のデータを渡す必要があります。
yr.〜という引数群に値を指定することで、グラフ種別や各種プロパティが設定できます。

R
mpg <- mtcars$mpg
superheat(mtcars,scale=TRUE,
          yr=mpg, 
          yr.plot.type="scatter", #デフォルトは"scatter"
          yr.axis.name="mpg")

image.png

ヒートマップ上側へグラフを付加する

ytへプロットしたいデータを指定します。ヒートマップの「列数」と同一数のデータを渡す必要があります。
行方向の処理と同様に、yt.〜という引数により各種プロパティが設定できます。

R
#ここでは、各列と「mpg」との相関を算出してプロットする
#(平均値や最大値など、列数と同一数となれば問題なし)
cor_mpg <- cor(mtcars)[1,]
superheat(mtcars,scale=TRUE,
          yt=cor_mpg,
          yt.plot.type="bar",
          yt.axis.name="correlation with mpg")

image.png

散布図を付加する

yr.plot.typeまたはyt.plot.typeに、"scatter"を指定します。
yr.plot.sizeまたはyt.plot.sizeにより、プロット点のサイズを指定できます。

R
superheat(mtcars,scale=TRUE,
          yr=mtcars$mpg, 
          yr.plot.type="scatter", #デフォルトは"scatter"
          yr.axis.name="mpg",
          yr.plot.size=0.5)

image.png

指定の点のみ色を変える

yr.obs.colまたはyt.obs.colに、全点の色を1つずつ指定することで、プロット点の色を指定することができます。

R
#プロット点の色を1つずつ指定する配列を準備(ここでは行数分)
point.col <- rep("skyblue", nrow(mtcars))
point.col[5] <- "orange"
point.col[15] <- "green"

superheat(mtcars,scale=TRUE,
          yr=mtcars$mpg, 
          yr.plot.type="scatter", #デフォルトは"scatter"
          yr.axis.name="mpg",
          yr.plot.size=0.5,
          yr.obs.col=point.col)

image.png

棒グラフを付加する

yr.plot.typeまたはyt.plot.typeに、"bar"を指定します。
散布図と同様に、yr.plot.colまたはyt.plot.sizeにより、棒のサイズを指定できます。

R
superheat(mtcars,scale=TRUE,
          yr=mtcars$mpg, 
          yr.plot.type="bar", 
          yr.axis.name="mpg",
          yr.plot.size=0.5)

image.png

指定の棒のみ色を変える

yr.bar.colまたはyt.bar.colで枠線の色を指定できます。(全ての棒で共通)
yr.obs.colまたはyt.obs.colに、全棒の色を1つずつ指定することで、プロットされる棒の塗りつぶし色を指定することができます。

R
#プロット点の色を1つずつ指定する配列を準備(ここでは行数分)
bar.col <- rep("grey", nrow(mtcars))
bar.col[5] <- "skyblue"
bar.col[15] <- "pink"

superheat(mtcars,scale=TRUE,
          yr=mtcars$mpg, 
          yr.plot.type="bar", 
          yr.axis.name="mpg",
          yr.plot.size=0.5,
          yr.bar.col="black", #枠線色
          yr.obs.col=bar.col) #棒の塗りつぶし色

image.png

線グラフを付加する

yr.plot.typeまたはyt.plot.typeに、"line"を指定します。
yr.line.sizeまたはyt.line.sizeで線の太さを指定できます。
yr.line.colまたはyt.line.colで線の色を指定できます。

R
superheat(mtcars, scale=TRUE,
          left.label="variable",
          yr=mtcars$mpg,
          yr.axis.name="mpg",
          yr.plot.type="line",
          yr.line.size=1,
          yr.line.col="gray")

image.png

平滑化(Lowess) した線グラフを付加する

yr.plot.typeまたはyt.plot.typeに、"smooth"を指定します。

R
superheat(mtcars, scale=TRUE,
          left.label="variable",
          yr=mtcars$mpg,
          yr.axis.name="mpg",
          yr.plot.type="smooth",
          yr.line.size=1,
          yr.line.col="gray")

image.png

点つき線グラフを付加する

yr.plot.typeまたはyt.plot.typeに、"scatterline"を指定します。

R
superheat(mtcars, scale=TRUE,
          left.label="variable",
          yr=mtcars$mpg,
          yr.axis.name="mpg",
          yr.plot.type="scatterline",
          yr.line.size=1,
          yr.line.col="gray")

image.png

ボックスプロットを付加する

yr.plot.typeまたはyt.plot.typeに、"boxplot"を指定します。
ボックスプロットの特性上、データ点が多く含まれている必要があるため、基本的には、複数データを束ねるグループ化の変数を指定します。

R
superheat(mtcars, scale=TRUE,
          # 各行が所属するグループを示す変数を指定します
          # (ここでは"gear")
          # この値は、factorやstrである必要があります。
          membership.rows=as.factor(mtcars$gear),

          #ラベルに元々の行名を表示する
          #(これを指定しない場合は"gear"の「分類子」のみが表示される)
          left.label="variable",

          # 「boxplot」での描画を指定することで、
          # 先に指定した"gear"ごとのボックスプロットが出力されます。
          yr=mtcars$mpg,
          yr.plot.type="boxplot",
          yr.axis.name="mpg boxplot / gear")

image.png

2
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
6