Rのライブラリ「superheat」について簡単にまとめてみました。
このライブラリは、ヒートマップをきれいに描けるだけでなく、簡単なクラスタリングができたり、グラフや階層構造の図を併せて描くことができたりします。
※本家のドキュメントを参考にさせて頂きました。
https://rlbarter.github.io/superheat/index.html
使用パッケージについて
「superheat」パッケージをインストールして読み込みます。
install.packages("superheat")
library(superheat)
通常のヒートマップを描画する
superheat
関数へ、ヒートマップ化対象のデータを渡して実行します。
title
でタイトル指定、title.size
で文字サイズを指定できます。
superheat(mtcars,
title="superheat sample",
title.size=6)
スケーリングする
scale
へTRUE
を指定することで、スケーリングができます。
superheat(mtcars, scale=TRUE)
ソートする
行/列でソートする
pretty.order.rows
またはpretty.order.cols
へTRUE
を指定することで、行または列方向のソートができます。
superheat(mtcars, scale=TRUE
pretty.order.rows=TRUE,
pretty.order.cols=TRUE)
カラム指定でソートする
order.rows
またはorder.cols
へ、行または列の各要素名を並べ替えた配列を指定することでソートができます。
superheat(mtcars, scale=TRUE
order.rows=order(mtcars$mpg)) #行方向をmpgで並べ替え
カラーマップを指定する
カラーパレットで指定する
heat.col.scheme
に、カレーパレット文字列を指定します。
指定できる種類は、"red", "green", "blue"などです。(デフォルトは"viridis")
superheat(mtcars, scale=TRUE,
heat.col.scheme="blue")
任意の色で指定する
最小、中間、最大の色が指定できます。
superheat(mtcars, scale=TRUE,
heat.pal=c("blue", "white", "red"))
クラスタリング
デンドログラム(階層構造の分類)
row.dendrogram
またはcol.dendrogram
へTRUE
を指定することで、行または列方向に対し、デンドログラムによるクラスタリングができます。
superheat(mtcars, scale=TRUE,
row.dendrogram=TRUE)
クラスタリング(k-means法)
n.clusters.rows
またはn.clusters.cols
へ「クラス数」を指定することで、行または列方向に対し、k-means法によるクラスタリングができます。
superheat(mtcars, scale=TRUE,
n.clusters.rows=3,
#ラベルに元々の行名を表示する
#(これを指定しない場合は「クラス番号」のみが表示される)
left.label="variable")
ヒートマップへグラフを付加する
行/列方向の集約したデータをプロットしたグラフを、ヒートマップの右や上へ追加することができます。
ここでの注意点は、プロットするデータは、ヒートマップのどちら側か(右か上か)により、データ数を行数または列数と揃える必要があります。
ヒートマップ右側へグラフを付加する
yr
へプロットしたいデータを指定します。ヒートマップの「行数」と同一数のデータを渡す必要があります。
yr.〜
という引数群に値を指定することで、グラフ種別や各種プロパティが設定できます。
mpg <- mtcars$mpg
superheat(mtcars,scale=TRUE,
yr=mpg,
yr.plot.type="scatter", #デフォルトは"scatter"
yr.axis.name="mpg")
ヒートマップ上側へグラフを付加する
yt
へプロットしたいデータを指定します。ヒートマップの「列数」と同一数のデータを渡す必要があります。
行方向の処理と同様に、yt.〜
という引数により各種プロパティが設定できます。
#ここでは、各列と「mpg」との相関を算出してプロットする
#(平均値や最大値など、列数と同一数となれば問題なし)
cor_mpg <- cor(mtcars)[1,]
superheat(mtcars,scale=TRUE,
yt=cor_mpg,
yt.plot.type="bar",
yt.axis.name="correlation with mpg")
散布図を付加する
yr.plot.type
またはyt.plot.type
に、"scatter"を指定します。
yr.plot.size
またはyt.plot.size
により、プロット点のサイズを指定できます。
superheat(mtcars,scale=TRUE,
yr=mtcars$mpg,
yr.plot.type="scatter", #デフォルトは"scatter"
yr.axis.name="mpg",
yr.plot.size=0.5)
指定の点のみ色を変える
yr.obs.col
またはyt.obs.col
に、全点の色を1つずつ指定することで、プロット点の色を指定することができます。
#プロット点の色を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)
棒グラフを付加する
yr.plot.type
またはyt.plot.type
に、"bar"を指定します。
散布図と同様に、yr.plot.col
またはyt.plot.size
により、棒のサイズを指定できます。
superheat(mtcars,scale=TRUE,
yr=mtcars$mpg,
yr.plot.type="bar",
yr.axis.name="mpg",
yr.plot.size=0.5)
指定の棒のみ色を変える
yr.bar.col
またはyt.bar.col
で枠線の色を指定できます。(全ての棒で共通)
yr.obs.col
またはyt.obs.col
に、全棒の色を1つずつ指定することで、プロットされる棒の塗りつぶし色を指定することができます。
#プロット点の色を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) #棒の塗りつぶし色
線グラフを付加する
yr.plot.type
またはyt.plot.type
に、"line"を指定します。
yr.line.size
またはyt.line.size
で線の太さを指定できます。
yr.line.col
またはyt.line.col
で線の色を指定できます。
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")
平滑化(Lowess) した線グラフを付加する
yr.plot.type
またはyt.plot.type
に、"smooth"を指定します。
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")
点つき線グラフを付加する
yr.plot.type
またはyt.plot.type
に、"scatterline"を指定します。
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")
ボックスプロットを付加する
yr.plot.type
またはyt.plot.type
に、"boxplot"を指定します。
ボックスプロットの特性上、データ点が多く含まれている必要があるため、基本的には、複数データを束ねるグループ化の変数を指定します。
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")