Rで解析:これはHeatMap?「funkyheatmap」パッケージ

Rの解析に役に立つ記事
スポンサーリンク

データの特徴をHeatMap?で表現するパッケージの紹介です。体裁データを用意することで、複数のカラーパレットやデータ表現だけでなく、行や列をグループ化するなど細かい調整が可能です。

本パッケージの使用は独特なため慣れるまで時間がかかるかもしれません。しかし、データ表現の強力な武器だと思います。参考までに本パッケージの表現が利用されている原著論文を紹介します。

A comparison of single-cell trajectory inference methods
https://www.nature.com/articles/s41587-019-0071-9

なお、従来のHeatMapが作成した場合は「ComplexHeatmap」パッケージがお勧めです。

パッケージバージョンは0.2.0。R version 4.2.2で確認しています。

スポンサーリンク

パッケージのインストール

下記コマンドを実行してください。

#パッケージのインストール
install.packages("funkyheatmap")

実行コマンド

詳細はコマンド、パッケージのヘルプを確認してください。

#パッケージの読み込み
library("funkyheatmap")

###データ例の作成#####
#tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
  install.packages("tidyverse");require("tidyverse")
}
set.seed(1234)
n <- 10
#&#12487;&#12540;&#12479;&#12398;&#34892;&#21517;&#12434;&#12300;id&#12301;&#12395;&#12377;&#12427;&#12398;&#12364;&#12509;&#12452;&#12531;&#12488;&#12391;&#12377;
TestData <- as_tibble(matrix(sample(0:30, 10*n, replace = TRUE), ncol = n,
                             dimnames = list(paste0("Group_", 1:10),
                                             LETTERS[1:n])),
                      rownames = "id")
########

###funky_heatmap&#29992;&#12398;&#12487;&#12540;&#12479;&#12398;&#20316;&#25104;&#20363;#####
#ColumnInfo:&#21015;&#20307;&#35009;&#35373;&#23450;
#PaletteInfo:&#12459;&#12521;&#12540;&#12497;&#12524;&#12483;&#12488;&#35373;&#23450;
#ColGroupInfo:&#21015;&#12464;&#12523;&#12540;&#12503;&#35373;&#23450;
#RowInfo:&#34892;&#24773;&#22577;&#35373;&#23450;
#RowGroupsInfo:&#34892;&#12464;&#12523;&#12540;&#12503;&#35373;&#23450;

##ColumnInfo:&#21015;&#20307;&#35009;&#35373;&#23450;&#12398;&#12487;&#12540;&#12479;&#20316;&#25104;
ColumnInfo <- tibble(
  #&#20869;&#23481;&#12434;&#35373;&#23450;
  id = colnames(TestData),
  
  #&#12487;&#12540;&#12479;&#34920;&#29694;:"bar","funkyrect","circle","pie","text"&#12364;&#25351;&#23450;&#21487;&#33021;
  geom = c("text",
           rep(c("bar","funkyrect","circle","pie"), each = 3,
               length = length(colnames(TestData))-1)),
  
  #&#12464;&#12523;&#12540;&#12500;&#12531;&#12464;&#12434;&#35373;&#23450;
  #geom="text"&#12399;NA&#12434;&#35373;&#23450;&#12377;&#12427;
  group = c(NA,  
            sort(rep(c("Data_1", "Data_2", "Data_3"), each = 3,
                     length = length(colnames(TestData))-1))),
  
  #&#21015;&#21517;&#12434;&#35373;&#23450;:&#35373;&#23450;&#12364;&#12394;&#12367;&#12392;&#12418;&#12503;&#12525;&#12483;&#12488;&#21487;&#33021;
  name = c("Group", "&#12363;&#12425;&#12384;&#12395;", "&#12356;&#12356;&#12418;&#12398;", "KARADA", "GOOD", "R&#35299;&#26512;",
           "&#23569;&#12375;&#12391;&#12418;", "&#12354;&#12394;&#12383;&#12398;", "&#35299;&#26512;&#12364;", "&#27005;&#12395;", "&#12394;&#12426;&#12414;&#12377;&#12424;&#12358;&#12395;"),
  
  #&#12459;&#12521;&#12540;&#12497;&#12524;&#12483;&#12488;&#12434;&#35373;&#23450;
  #geom="text"&#12399;NA&#12434;&#35373;&#23450;&#12377;&#12427;
  palette = c(NA,  
              sort(rep(c("Col_1", "Col_2", "Col_3"), each = 3,
                       length = length(colnames(TestData))-1))),
  
  #&#20961;&#20363;&#34920;&#31034;&#12434;&#35373;&#23450;:TRUE/FALSE
  #&#27425;&#26399;&#12496;&#12540;&#12472;&#12519;&#12531;&#12391;&#20877;&#30906;&#35469;
  legend = rep(TRUE, length = 11),
  
  #&#21508;&#21015;&#24133;&#12398;&#35373;&#23450;
  width = c(5, rep(4, 4), rep(NA, 6))
  
  )
##

##PaletteInfo:&#12459;&#12521;&#12540;&#12497;&#12524;&#12483;&#12488;&#35373;&#23450;&#12398;&#12487;&#12540;&#12479;&#20316;&#25104;
#list&#24418;&#24335;&#12391;&#25351;&#23450;&#12375;&#12414;&#12377;
#colorRamp2&#12497;&#12483;&#12465;&#12540;&#12472;&#12364;&#12394;&#12369;&#12428;&#12400;&#12452;&#12531;&#12473;&#12488;&#12540;&#12523;
#&#21442;&#32771;:https://www.karada-good.net/analyticsr/r-756-2/
if(!require("colorRamp2", quietly = TRUE)){
  install.packages("colorRamp2");require("colorRamp2")
}
Col_1 <- colorRamp2(breaks = c(0, 0.5, 1),
                    colors = c("#4b61ba", "#756c6d", "#ad8a80"))
Col_2 <- colorRamp2(breaks = c(0, 0.5, 1),
                    colors = c("yellow", "#F2E96B", "#CCDE8F"))
Col_3 <- colorRamp2(breaks = c(0, 0.5, 1),
                    colors = c("green", "#bfe8d5", "#dfcdd1"))

#&#20316;&#25104;
PaletteInfo <- list(  
  Col_1 = Col_1(seq(0, 1, length = 15)),
  Col_2 = Col_2(seq(0, 1, length = 15)),
  Col_3 = Col_3(seq(0, 1, length = 15)),
  Red = rep("#ff0000", 4))
##

##&#21015;&#12464;&#12523;&#12540;&#12503;&#35373;&#23450;&#12398;&#12487;&#12540;&#12479;&#20316;&#25104;
ColGroupInfo <- tibble(
  category = c("data_1", "data_2", "data_3"),
  group = c("Data_1", "Data_2", "Data_3"),
  palette = c("Col_1", "Red", "Col_3")
)
##

##RowInfo:&#34892;&#24773;&#22577;&#35373;&#23450;&#12398;&#12487;&#12540;&#12479;&#20316;&#25104;
RowInfo <- TestData %>% 
  transmute(id, group = rep(c("test", "Test"),
                            each = 5))
##

##RowGroupsInfo:&#34892;&#12464;&#12523;&#12540;&#12503;&#12398;&#35373;&#23450;&#12398;&#12487;&#12540;&#12479;&#20316;&#25104;
RowGroupsInfo <- tibble(Group = c("Group&#21517;", "&#12464;&#12523;&#12540;&#12503;&#21517;"),
                        group = c("test", "Test"))
##
########

#&#22259;&#12398;&#12503;&#12525;&#12483;&#12488;:funky_heatmap&#12467;&#12510;&#12531;&#12489;
funky_heatmap(TestData,
              column_info = ColumnInfo,
              column_groups = ColGroupInfo,
              palettes = PaletteInfo,
              row_info = RowInfo,
              row_groups = RowGroupsInfo,
              expand = c(xmin = 0, xmax = 3,
                         ymin = 0, ymax = 0))

出力例


少しでも、あなたの解析が楽になりますように!!

タイトルとURLをコピーしました