Rによるヒートマップの作り方 【遺伝子クラスタリング・色の変更も】

例えば遺伝子発現変動解析など、生命科学・医学研究ではヒートマップを書くことは少なくありません。この記事では、Rを使ってヒートマップを書く実際の手順を、生命科学の仮想データを使って紹介します。

ヒートマップを書くことができる代表的なR関数

Rにはヒートマップを書くための関数やパッケージがいくつもあります。まずはその代表的なものをまとめます。

ヒートマップを書けるRの関数
heatmap関数 (デフォルト)
heatmap.2関数 (gplotsパッケージ)
heatmap.plus関数 (heatmap.plusパッケージ)
aheatmap関数 (NMFパッケージ)
pheatmap関数 (pheatmapパッケージ)
heatmaply関数 (heatmaplyパッケージ)
ComplexHeatmap関数 (ComplexHeatmapパッケージ)
Superheat関数 (Superheatパッケージ)
Heatplus関数 (Heatplusパッケージ)
iheatmapr関数 (iheatmaprパッケージ)

また、そもそもすでにあるヒートマップと同じ用に書きたい場合にはそのコードの該当する部分を置き換えるだけで済むので圧倒的に早いです。Rにおけるグラフの書き方入門【簡単なスクリプトコピペでOK】に具体的な方法をまとめています。

heatmap関数を使ったヒートマップの作り方

それではデフォルトで入っているheatmap関数を使ったヒートマップの作り方を見ていきます。

まずはデータを用意します。今回はランダムに乱数から生成します。

x - matrix(rnorm(1000), ncol = 5)
colnames(x) - paste0("sample", 1:ncol(x))
rownames(x) - paste0("gene", 1:nrow(x))
head(x)

このようなデータができました。

201016 1

heatmap関数にこれを渡すことで、自動的にヒートマップを書いてくれます。

heatmap(x)

201016 2

デフォルトでは自動的にクラスタリングが行われますが、これを行わないようにするにはRowv = NA (行のクラスタリングをしない)やColv = NA (列のクラスタリング)と指定すればOKです。

例えば行はそのままクラスタリングするが、列はしないということであればこのようになります。

heatmap(x, Colv = NA)

201016 3

色の指定はgplotsパッケージで提供されている色のセットを使うと楽です。まずはgplotsパッケージを読み込みます。

例えば、赤と青で表現したい場合には

heatmap(x, col=bluered(256))

201016 4

もちろん、自分で色を自由に作ることもできます。まずはcolorpanel関数でパレットを作ります。ここで水色→白→赤紫に変化していく色合いで作ってみます。

mycolor - gplots::colorpanel(n = 256, low = "deepskyblue", mid = "white", high = "violetred")

あとはheatmap関数のcol引数に自作のパレットを割り当てるだけです。

heatmap(x, col=mycolor)

201016 5

より複雑なヒートマップ

複雑なヒートマップはComplexHeatmapパッケージを使うと便利です。

例えば脳腫瘍のサンプルにおけるメチル化をヒートマップで表示するとか。
201016 6

がんにおけるさまざまなmutationを可視化するとか。
201016 7

シングルセルRNA-seq解析で得られた細胞のヘテロ性を表示するとか。
201016 8

こういった複雑なヒートマップを描くことができます。包括的なチュートリアル (英語) も公開されていて、さまざまなことをちょっとしたコピペで行うことができます。

まとめに代えて

この記事ではRでヒートマップを書くための関数やパッケージを紹介しました。Rにおける可視化は特にggplotパッケージを使えば自在に行うことができます。

「Rグラフィックスクックブック ―ggplot2によるグラフ作成のレシピ集」には、膨大な数の図表とその書き方が実際のコードで紹介されていて、図表を流し読みしながら自分の欲しいイメージに近いものを表現するコードを探すことができます。

「Rをはじめよう 生命科学のためのRStudio入門」は、生命科学領域を題材としてRによる統計解析・ggplotによる可視化の方法を手取り足取り教えてくれています。

今日も【生命医学をハックする】 (@biomedicalhacks) をお読みいただきありがとうございました。当サイトの記事をもとに加筆した月2回のニュースレターも好評配信中ですので、よろしければこちらも合わせてどうぞ