LoginSignup
1
1

More than 1 year has passed since last update.

R pheatmapで色々指定する

Last updated at Posted at 2022-07-29

やること

Rのパッケージpheatmapはmatrixを突っ込むだけでもheatmapを作ってくれる便利な関数ですが、ラベルや色などを指定することでよりいい感じになります。
一方で、パラメータの指定は中々勘ではできない仕様なので、軽くまとめます。
pheat.png
(色々指定したheatmap)

データ

デフォルトでインストールされているirisからサンプリングして使います。
irisは三種類の花の花弁やがくについてのデータです。
上図のように、pheatmapでは複数のラベルを表示できるので、今回は花の種類(Species)に加えて、適当にLotというラベルをつけてみます。

実際にデータを整形していきます。

library(tidyverse)
set.seed(1)
N <- 3
# 各種から3データ(計9データ)を3回に分けて取得
iris2 <- iris %>% 
  group_by(Species) %>% nest() %>%
  mutate(
    sample=map(data,~{
      bind_rows(
        .x[sample(50,N),],
        .x[sample(50,N),],
        .x[sample(50,N),],
        ) %>%
        mutate(Lot=rep(paste0('Lot',1:3),each=N))
      })
  ) %>%
  select(-data) %>%
  unnest(sample) %>%
  ungroup() %>% 
  as.data.frame()
rownames(iris2) <- paste0('s',1:(N*3*3))
# s1~s27のデータ番号をrownamesに与える

screenshot 2022-07-29 15.34.15.png

色々指定する

1. heatmapにする相関行列
df <- iris2 %>% select(-Species,-Lot) %>% as.data.frame()
co <- cor(t(df))
diag(co) <- NA
# 対角成分は必ず1となり、見る必要はないのでNAにしておく
2. annotationを指定するオブジェクト
anno <- iris2 %>% select(Species,Lot)

annoのrownamesには、corのrownames, colnames(もしくはどちらか一方)に対応するインデックスが入っている必要があります。
今回はcorとannoの両方に、iris2で与えたs1~s27が残っているので、selectするだけで大丈夫です。

3. annotationの色を指定するオブジェクト
pal1 <- ggsci::scale_color_d3('category10')
pal2 <- ggsci::scale_color_tron()
col.species <- pal1$palette(3)
col.lot <- pal2$palette(3)
# カラーコードのベクトルを作成しているだけなので、以下のようにシンプルに手打ちでもいけます
#  col.lot <- c("#FF410DFF","#6EE2FFFF","#F7C530FF")

names(col.species) <- unique(iris$Species)
names(col.lot) <- paste0('Lot',1:3)
# names属性にannoの要素を与える
anno_color <- list(
  Species = col.species, 
  Lot= col.lot
  )
# annoの列名に対応する名前をnamesに

screenshot 2022-07-29 15.53.41.png
こんな感じ

4. ヒートマップを描く
pheatmap::pheatmap(
  mat = co, 
  color = viridis::viridis(256),
  annotation_row = anno, 
  annotation_col = anno,
  annotation_colors = anno_color, 
  border_color='gray',
  cellheight = 10,
  cellwidth = 10
  )

annotationもろもろの他に、ヒートマップの色、格子の色、cellのサイズを指定しました。

pheat.png
再掲。
SpeciesとLotの相関に与える影響の違いが一眼でわかるので、アノテーションがあるだけで大分違います。
今回は相関行列を使ったので、行と列のラベルが一致していますが、annotation_row、annotation_colに与えるオブジェクトを別々に作成することで、対象ではないmatrixについてもアノテーションが可能です。

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1