R を使ったヒートマップの作り方

UB3/informatics/r/heatmap_r

このページの最終更新日: 2022/07/26

  1. 概要: ヒートマップとは
  2. heatmap 関数
  3. heatmap.2 関数
  4. geom_tile 関数
  5. pheatmap 関数
  6. ComplexHeatmap 関数
  7. superheat 関数

関連ページ


広告

概要: ヒートマップとは

下にあるような、値を色の違いで表した図をヒートマップ heatmap という (図は Public domain)。R には、ヒートマップを作る関数はたくさんある。このページでは、それらの関数を概観する。 詳細なヒートマップ作成方法は、内容が増えてきた関数から個別のページを作ってまとめていく。

ヒートマップを作る際には、データを並べ替えるクラスタリング clustering も同時に行われることが多い。下の図では、X および Y の 2 つの軸でクラスタリングが行われている。

有意な違いのあるセルに * をつける場合も多い。このやり方は このページ などに書かれている。2 つのデータフレームを位置で対応させなければならないので、ちょっと面倒。

Rで作成したヒートマップ

heatmap

R デフォルトの関数。heatmap(A) で、A は行列。read.csv などで読み込んだデータは、リスト形式 list になっている場合がある。行列に変換する関数 as.matrix も覚えておくと便利だろう。

例えば、組み込みデータセット の一つ、mtcars を使って以下のようにヒートマップを作る。

heatmap(as.matrix(mtcars))

Rで作成したmtcarsのヒートマップ

heatmap 関数には、以下のようなオプションがある。個人的には、この R デフォルトの関数が一番使いやすいように思う。

Colv, Rowv

Colv = NA で列をクラスタリングしなくなる。行のクラスタリング解除は Rowv = NA である。

scale

scale = c("row/column/none") で、行ごと、列ごとの色の設定などを指定。


広告

heatmap.2

gplots パッケージに含まれる関数。

heatmap.2(A, col=greenred(50), trace="none")

greenred(50) は、 緑と赤で 50 段階で色分け。trace="none" は青い トレースの線をトレースの線を 消す。

geom_tile

ggplot2 パッケージに含まれる関数。ヒートマップは作れるが、クラスタリング機能がない。クラスタリングしたい場合は、他の関数と組み合わせる必要がある。


pheatmap

pheatmap ライブラリに含まれる。色がきれいだと思う。

参考ページ RDocumentation, GitHub.

クラスタリング

  • cluster_cols = TRUE または FALSE
  • cluster_rows = TRUE または FALSE

行列の名前、位置

  • show_rownames: TRUE または FALSE
  • show_colnames: TRUE または FALSE

残念ながら、row names を左に置くためのオプションはない。不可能ではない。また、ComplexHeatmap::pheatmap という関数を使えば、ComplexHeatmap のオプションを使いつつ pheatmap の色にできるようだ。

ComplexHeatmap

複雑なヒートマップを作りたい場合 (1,3)。インストールは BiocManager から。BiocManager::install ("ComplexHeatmap") とする。

以下のオプションの詳細は RDocumentation に。

ComplexHeatmap::pheatmap という関数で、pheatmap の色合いの ComplexHeatmap が作れるようだ。

クラスタリング

  • cluster_columns = TRUE または FALSE
  • cluster_rows = TRUE または FALSE
  • show_column_dend = TRUE または FALSE
  • show_row_dend = TRUE または FALSE

また、hclust 関数などで既にクラスタリングが完了していれば、それを変数として読み込むことができる。

clustering <- hclust(data, method="average")
Heatmap(mat, cluster_columns = clustering)

行列の名前、位置

  • show_row_names: TRUE または FALSE
  • show_column_names: TRUE または FALSE
  • row_names_side = "left" または "right"
  • column_names_side: "top" または "bottom"
  • row_title = c("文字列") でタイトル指定
  • column_title = c("文字列") でタイトル指定

デンドログラム表示、位置

  • show_row_dend: TRUE または FALSE
  • show_column_dend: TRUE または FALSE
  • row_dend_side = "left" または "right"
  • column_dend_side: "top" または "bottom"

ヒートマップの split

ヒートマップに切れ目を入れる。

  • row_km, column_km: 数字を指定して、ブロックの数を決める。k-means 法によってクラスタリングされる。
  • row_km_repeats, column_km_repeats: 1 以外の数字を指定する。row_km, column_km には乱数が使われているので、同じクラスタリングが再現されないことがある。これを防ぐために数値を設定する。
  • row_split = 2, column_split = 3 のように数字を指定して、デンドログラムに従って split が可能。
Rで作成したmtcarsのヒートマップ

na_col

この関数は、NA があってもクラスタリングをすることができる (4)。ただし、距離行列を計算することができない場合にはクラスタリングできない (参考)。全て NA の列があったりすると、距離行列は計算できない。

Hclust という関数をクラスタリングに使っているので、これは Hclust の特徴と思われる。

name

name = "parameter" のようにして、legend の名前を決める。

cell_fun

定めた関数に応じて、それぞれのセルにグラフィックを追加する。有意なセルにアスタリスクを表示させるのはよくある表現法である。方法は このページ文献 4 の cell_fun の項目に書かれている。

cell_fun = function(j, i, x, y, width, height, fill) { if(mat[i, j] < 0.05) {grid.text("*", x, y)} # grid.text(sprintf("%.1f", mat[i, j]), x, y, gp = gpar(fontsize = 10)) }

superheat 関数

使い方を丁寧にまとめたページがある (2)。

devtools::install_github("rlbarter/superheat") でインストールできる。


広告

References

  1. Gu and Hübschmann, 2022a. Make interactive complex heatmaps in R. Bioinformatics 38, 1460-1462, 2022.
  2. 複雑なデータをヒートマップで可視化するためのRパッケージ Superheat. Link: Last access 2022/05/20.
  3. Rで解析: 理想のヒートマップ作成に役に立ちます「ComplexHeatmap」パッケージ. Link: Last access 2022/05/21.
  4. ComplexHeatmap Complete Reference. Link: Last access 2022/05/22.

コメント欄

各ページのコメント欄を復活させました。スパム対策のため、以下の禁止ワードが含まれるコメントは表示されないように設定しています。レイアウトなどは引き続き改善していきます。「管理人への質問」「フォーラム」へのバナーも引き続きご利用下さい。

禁止ワード: http, the, м (ロシア語のフォントです)


このページにコメント

Name:


Comment:



これまでに投稿されたコメント

Date Name Comment

2022-03-10 22:17:30.625426

ZAP

2022-03-10 22:15:11.874723

ZAP

2022-03-10 20:56:20.436581

ZAP