R: ComplexHeatmap でヒートマップに行アノテーションを追加する
UB3/informatics/r/heatmap_annotation
このページの最終更新日: 2024/09/30広告
概要: Heatmap annotation とは
ヒートマップの上下や横に加える追加情報を heatmap annotation という。上下の場合、列に対して情報を追加することになるので、列アノテーション column annotation という。
行に対して情報を追加する場合は、行アノテーション row annotation であり、ヒートマップの右か左に別の図がつくことになる。
このページでは、R の ComplexHeatmap という関数で行アノテーションを追加する方法をまとめる。列アノテーションの追加方法は、ComplexHeatmap でヒートマップに列アノテーションを追加する を参照のこと。
width を使う方法
アノテーションというよりは、複数のヒートマップを並べて配置するようなイメージ。
組み込みデータセット mtcars を例として使用。mtcars はこんな感じのデータセット。車の性能がまとめられている。
まずはただ heatmap を作って様子を見てみる。
デフォルトの色は赤 - 青、両軸でクラスタリングされるので、以下のような図が出力される。排気量 displacement と馬力 horse power, hp の数値が大きいので、その他の部分が真っ青になってしまう。
さらに、cyl と gear はシリンダーとギアの数で、整数値をもつ離散変数。vs と am は、エンジン (0 = V-shaped, 1 = straight) と Transmission (0 = automatic, 1 = manual) で、0 または 1 の二値変数である。全部をそのまま heatmap に投げ込むのは正しくない。
なお、R デフォルトの heatmap 関数を使うとこんな色合いになる (クリックで拡大)。
さらに、input が matrix でなく dataframe なので変換したという警告メッセージが出る。
Warning message: The input is a data frame-like object, convert it to a matrix.
heatmap を作る場合は、as.matrix でマトリクスに変換するのが基本である (→ R の行列とデータフレームの違い)。さらに cyl, gear, vs, am を除いて、以下のようにする。
Heatmap(as.matrix(mtcars2))
右側に、先ほど取り除いた cyl や gear を追加してみよう。
別々のヒートマップをそれぞれ width1, width2... というオブジェクトに入れて、width1 + width2 のようにして表示させるイメージ。
show_row_names = TRUE, row_names_side = "left",
name = "param")
width3 = Heatmap(as.matrix(mtcars$gear), name = "gear")
vs, am は 0/1 の二値変数なので、それらを赤と緑で指定するパターン。フォントサイズの変更などもして見やすくした。
ComplexHeatmap のアノテーションとして追加する方法
以下のような手順になる。
- rowAnnotation 関数を使ってアノテーションを指定し、それをオブジェクトとして保存する。
- Heatmap 関数の中で、そのオブジェクトを right_annotation または left_annotation として参照する。
rowAnnotation 関数は、HeatmapAnnotation 関数に内容を引き渡して実行しているらしい。色の指定など、HeatmapAnnotation 関数のところで解説されている方法を使っても動くことがある。
ヒートマップの行アノテーション
同じく mtcars を使い、mpg をアノテーションとして表示してみる。
rowAnnotation 関数では、mpg = mtcars$mpg のように単にデータフレームを指定すると、アノテーションがヒートマップになる。
この場合、mtcars$mpg は mtcars の一部なので、何もしなくても順番は一致している。Lotus Europa, Fiat 128, Honda Civic, Toyora Corora など mpg が高いことで確認可能。外部データを参照してアノテーションを作る場合には、順番にも注意を払う必要がある。
色を指定する際には、カテゴリー変数なら次のようになる。vec1 というベクターがあり、これを df という名前のアノテーションとして追加している。a, b, c というベクターの要素に対して、それぞれ色を指定する。show_annotation_name は、annotation の下に名前を表示するかどうか。書き方が少しわかりにくい。
棒グラフの行アノテーション
行アノテーションを棒グラフにしたい場合は、以下のように anno_barplot として指定する。bar のところは表示される名前を指定するだけなので、もちろん上の例のように mpg でも良い。
anno_numeric を使うと、棒グラフにプラスとマイナスを表示できる。
広告
References
Script: ub_related/R_script/Practice_heatmap_1_v1.R
- R : matrixとdata.frameの違い. Link: Last access 2022/05/21.
コメント欄
サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。