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

UB3/informatics/r/heatmap_r

このページの最終更新日: 2024/04/05

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

詳細は 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

この他、k-means 法によるクラスタリング、外部の関数で行ったクラスタリングの読み込みなどが可能。詳細は ComplexHeatmap 関数: ヒートマップのクラスタリング を参照のこと。

row_split = 2 のようにして、クラスタリングにしたがってヒートマップに切れ目を入れることもできる。この方法も、リンク先のページに移動した。

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

行列の名前、位置、角度

  • show_row_names: TRUE または FALSE
  • show_column_names: TRUE または FALSE
  • row_names_side = "left" または "right"
  • column_names_side: "top" または "bottom"
  • column_names_rotate: 45 のように角度で指定
  • 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"

レジェンド表示
show_heatmap_legend

TRUE または FALSE

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)) }

col

色の設定。circlize というライブラリを読み込み、col_fun = colorRamp2(c(0, 5, 10), c("blue", "white", "red")) のように col_fun を設定する。これを col = col_fun として Heatmap 関数内で参照する。

width
height

Heatmap 部分の全体の大きさを設定。それぞれのセルは自動で同じ大きさになる。行名、列名の部分のサイズは、これではなく下にある column_names_max_height などで指定する。

unit を使い、width = unit(5.0, "cm") のように指定する。

Heatmap を作る mat を使って、width = ncol(mat)*unit(5, "mm"), height = nrow(mat)*unit(5, "mm") とすれば、各パネルの大きさを揃えることができる。

row_names_max_width
column_names_max_height

名前が長いと、端が切れてしまって全部表示されないことがある。その場合はこれで設定。同じように、unit を使って row_names_max_width = unit(2.0, "cm") のようにする。

heatmap_legend_param

Legend に関係するパラメーターを設定する。list の中に入れる。

heatmap_legend_param = list(title = "rnorm", at = c(-2, 0, 2), labels = c("neg_two", "zero", "pos_two"))

  • title: Legend のタイトル。name と同じに見える
  • at: 連続変数の場合、上限、中間点、下限を決める
  • labels: at に対応して、ラベルを決める

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.

コメント欄

サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。