Rで解析:理想のヒートマップ作成に役に立ちます「ComplexHeatmap」パッケージ

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

ヒートマップの細かな体裁調整が可能なパッケージの紹介です。非常に多くの機能が搭載されています。例えば、ヒートマップにデータ分布を示す図の追加やヒートマップを並べて描写することも簡単に可能です。

多くの機能が搭載されています。全てを紹介しきれないので、一部のコマンドを紹介します。基本的な利用には十分と思います。紹介しきれなかった機能は、下記Githubページを確認いただければと思います。

・GitHubのjokergoo/ComplexHeatmap
 https://github.com/jokergoo/ComplexHeatmap

パッケージバージョンは2.10.0。実行コマンドはwindows 11のR version 4.1.2で確認しています。


スポンサーリンク

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

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

#パッケージのインストール
if (!require("BiocManager", quietly = TRUE)){
  install.packages("BiocManager")
}
BiocManager::install("ComplexHeatmap", force = TRUE)

実行コマンド

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

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

###データ例の作成#####
n <- 30
TestData1 <- as.matrix(data.frame(row.names = sample(paste0("Group", 1:n), n, replace = FALSE),
                                  Data1 = rnorm(n) + rnorm(n) + rnorm(n),
                                  Data2 = rnorm(n) + rnorm(n) + rnorm(n),
                                  Data3 = sample(0:1, n, replace = TRUE)))
TestData2 <- as.matrix(data.frame(Data1 = sample(c(LETTERS[15:24], NA), n, replace = TRUE),
                                  Data2 = sample(LETTERS[15:24], n, replace = TRUE),
                                  Data3 = sample(c(LETTERS[15:24], NA), n, replace = TRUE)))
#######

###&#12498;&#12540;&#12488;&#12510;&#12483;&#12503;&#12398;&#22522;&#26412;&#30340;&#12394;&#25551;&#20889;:Heatmap&#12467;&#12510;&#12531;&#12489;#####
Heatmap(TestData1)
########

###&#12475;&#12523;&#12398;&#33394;&#12434;&#25351;&#23450;:col&#12458;&#12503;&#12471;&#12519;&#12531;#####
#scales&#12497;&#12483;&#12465;&#12540;&#12472;&#12391;&#33394;&#12434;&#35373;&#23450;
if (!require("scales", quietly = TRUE)){
  install.packages("scales");require("scales")
}
x <- seq(0, 1, length = 10)
ColPal <- seq_gradient_pal(c("#e1e6ea", "#505457", "#4b61ba", "#a87963",
                                "#d9bb9c", "#756c6d"))(x)
#&#20363;&#12360;&#12400;,&#36899;&#32154;&#22793;&#25968;&#12398;&#12498;&#12540;&#12488;&#12510;&#12483;&#12503;&#12398;&#22580;&#21512;
Heatmap(TestData1, col = ColPal)

#&#20363;&#12360;&#12400;,&#12459;&#12486;&#12468;&#12522;&#22793;&#25968;&#12398;&#12498;&#12540;&#12488;&#12510;&#12483;&#12503;&#12398;&#22580;&#21512;
#&#27424;&#25613;&#20516;&#12398;&#33394;&#12434;&#25351;&#23450;:na_col&#12458;&#12503;&#12471;&#12519;&#12531;
#structure&#12467;&#12510;&#12531;&#12489;&#12391;&#12521;&#12505;&#12523;&#20184;&#12365;&#12398;&#25991;&#23383;&#37197;&#21015;&#12434;&#20316;&#25104;
CateColPal <- structure(ColPal, names = LETTERS[15:24])
Heatmap(TestData2, col = CateColPal, na_col = "yellow")
########

###&#21015;&#12362;&#12424;&#12403;&#34892;&#12479;&#12452;&#12488;&#12523;&#12398;&#35373;&#23450;#####
#&#21015;&#20596;:column_title&#12458;&#12503;&#12471;&#12519;&#12531;
Heatmap(TestData1, col = ColPal, column_title = "Column TITLE")
#&#34892;&#20596;:row_title&#12458;&#12503;&#12471;&#12519;&#12531;
Heatmap(TestData1, col = ColPal, row_title = "Row TITLE")
########

###&#21015;&#12362;&#12424;&#12403;&#34892;&#12479;&#12452;&#12488;&#12523;&#12398;&#20301;&#32622;&#35373;&#23450;#####
#&#21015;&#20596;:column_title_side&#12458;&#12503;&#12471;&#12519;&#12531;;"top","bottom"&#12398;&#35373;&#23450;&#12364;&#21487;&#33021;
Heatmap(TestData1, col = ColPal, column_title = "Column TITLE",
        column_title_side = "bottom")
#&#34892;&#20596;:row_title_side&#12458;&#12503;&#12471;&#12519;&#12531;;"left","right"&#12398;&#35373;&#23450;&#12364;&#21487;&#33021;
Heatmap(TestData1, col = ColPal, row_title = "Column TITLE",
        row_title_side = "right")
########

###&#21015;&#12362;&#12424;&#12403;&#34892;&#12479;&#12452;&#12488;&#12523;&#12398;&#22238;&#36578;#####
#&#21015;&#20596;:column_title_rot
Heatmap(TestData1, col = ColPal, column_title = "Column TITLE",
        column_title_side = "bottom", column_title_rot = 90)
#&#34892;&#20596;:row_title_rot
Heatmap(TestData1, col = ColPal, row_title = "Column TITLE",
        row_title_side = "right", row_title_rot = 0)
########

###&#20961;&#20363;&#12479;&#12452;&#12488;&#12523;&#12398;&#35373;&#23450;:name&#12458;&#12503;&#12471;&#12519;&#12531;#####
Heatmap(TestData1, col = ColPal, name = "Legend TITLE")
#####

###&#12463;&#12521;&#12473;&#12479;&#12522;&#12531;&#12464;&#36317;&#38626;&#35336;&#31639;&#12392;&#32080;&#21512;&#26041;&#27861;&#12398;&#25351;&#23450;#####
###&#36317;&#38626;&#35336;&#31639;:clustering_distance_rows,clustering_distance_columns&#12458;&#12503;&#12471;&#12519;&#12531;#####
#euclidean","maximum","manhattan","canberra","binary","minkowski",
#"pearson","spearman","kendall"&#12398;&#25351;&#23450;&#12364;&#21487;&#33021;
###&#32080;&#21512;&#26041;&#27861;:clustering_method_rows,clustering_method_column&#12458;&#12503;&#12471;&#12519;&#12531;#####
#"ward.D","ward.D2","single","complete","average"(= UPGMA),"mcquitty"(= WPGMA),
#"median"(= WPGMC),"centroid"(= UPGMC)&#12398;&#25351;&#23450;&#12364;&#21487;&#33021;
Heatmap(TestData1, clustering_distance_rows = "pearson",
        clustering_method_rows = "single")
########

###&#12463;&#12521;&#12473;&#12479;&#12522;&#12531;&#12464;&#12398;&#34920;&#31034;&#26377;&#28961;#####
#&#21015;&#20596;:cluster_columns&#12458;&#12503;&#12471;&#12519;&#12531;
#&#34892;&#20596;:cluster_rows&#12458;&#12503;&#12471;&#12519;&#12531;
Heatmap(TestData1, cluster_rows = TRUE, cluster_columns = FALSE)
########

###&#12463;&#12521;&#12473;&#12479;&#12522;&#12531;&#12464;&#12398;&#34920;&#31034;&#20301;&#32622;#####
#&#21015;&#20596;:row_dend_side&#12458;&#12503;&#12471;&#12519;&#12531;:"left","right"&#12398;&#25351;&#23450;&#12364;&#21487;&#33021;
#&#34892;&#20596;:column_dend_side&#12458;&#12503;&#12471;&#12519;&#12531;:"top","bottom"&#12398;&#25351;&#23450;&#12364;&#21487;&#33021;
Heatmap(TestData1, row_dend_side = "right", column_dend_side = "bottom")
########

###&#34892;&#20596;&#12463;&#12521;&#12473;&#12479;&#12522;&#12531;&#12464;&#12398;&#20998;&#21106;&#12392;&#38291;&#38548;&#35519;&#25972;#####
#&#20998;&#21106;:km&#12458;&#12503;&#12471;&#12519;&#12531;
#&#38291;&#38548;&#35519;&#25972;:gap&#12458;&#12503;&#12471;&#12519;&#12531;;&#21336;&#20301;&#12399;unit&#12391;&#25351;&#23450;
#&#20998;&#21106;&#24460;&#12398;&#12521;&#12505;&#12523;&#33394;&#35373;&#23450;:row_names_gp&#12458;&#12503;&#12471;&#12519;&#12531;
#&#26360;&#24335;&#12399;gpar&#12458;&#12503;&#12471;&#12519;&#12531;&#12391;&#25351;&#23450;;&#33394;:col,&#12521;&#12505;&#12523;&#12469;&#12452;&#12474;:fontsize;&#21021;&#26399;&#20516;14
#&#36899;&#32154;&#22793;&#25968;&#12398;&#22580;&#21512;
Heatmap(TestData1, km = 2, gap = unit(10, "mm"),
        row_names_gp = gpar(col = c("green", "orange"), fontsize = c(10, 14)))
#&#12459;&#12486;&#12468;&#12522;&#22793;&#25968;&#12398;&#22580;&#21512;
#&#20998;&#21106;:split&#12458;&#12503;&#12471;&#12519;&#12531;;&#20869;&#23481;&#12434;&#25991;&#23383;&#21015;&#12391;&#25351;&#23450;
#&#32207;&#25968;30&#12398;&#12487;&#12540;&#12479;&#12434;&#21508;10&#12391;3&#20998;&#21106;
Heatmap(TestData2, split = rep(LETTERS[1:3], each = 10), gap = unit(5, "mm"))
########

###&#21015;,&#34892;&#12398;&#20006;&#12403;&#26367;&#12360;########
#&#21015;&#20596;:column_order&#12458;&#12503;&#12471;&#12519;&#12531;
#&#34892;&#20596;:row_order&#12458;&#12503;&#12471;&#12519;&#12531;
Heatmap(TestData1, cluster_rows = FALSE, cluster_columns = FALSE,
        column_order = c("Data3", "Data2", "Data1"), row_order = paste0("Group", 30:1))
########

###&#21015;,&#34892;&#12521;&#12505;&#12523;&#12398;&#35373;&#23450;#####
#&#21015;&#20596;:column_names_gp&#12458;&#12503;&#12471;&#12519;&#12531;
#&#34892;&#20596;:row_names_gp&#12458;&#12503;&#12471;&#12519;&#12531;
#&#26360;&#24335;&#12399;gpar&#12458;&#12503;&#12471;&#12519;&#12531;&#12391;&#25351;&#23450;;&#33394;:col,&#12521;&#12505;&#12523;&#12469;&#12452;&#12474;:fontsize;&#21021;&#26399;&#20516;14
Heatmap(TestData1,
        column_names_gp = gpar(col = c(rep("red", 1), rep("blue", 2)), fontsize = 20),
        row_names_gp = gpar(col = c(rep("red", 20), rep("blue", 10)), fontsize = 10))
########

###&#21508;&#12475;&#12523;&#26528;&#32218;&#12398;&#35373;&#23450;:rect_gp&#12458;&#12503;&#12471;&#12519;&#12531;#####
#&#26360;&#24335;&#12399;gpar&#12458;&#12503;&#12471;&#12519;&#12531;&#12391;&#25351;&#23450;;&#33394;:col,&#32218;&#31278;:lty,&#22826;&#12373;:lwd
Heatmap(TestData1, rect_gp = gpar(col = "black", lty = 1, lwd = 3))
########

###&#12498;&#12540;&#12488;&#12510;&#12483;&#12503;&#12398;&#27178;&#24133;&#12434;&#22793;&#12360;&#12390;&#25551;&#20889;:width&#12458;&#12503;&#12471;&#12519;&#12531;#####
Width1 <- Heatmap(TestData1, width = 2)
Width2 <- Heatmap(TestData2, width = unit(2, "cm"))
Width1 + Width2
#####

###&#12498;&#12540;&#12488;&#12510;&#12483;&#12503;&#12434;&#20006;&#12409;&#12390;&#25551;&#20889;:draw&#12467;&#12510;&#12531;&#12489;#####
#Heatmap&#12467;&#12510;&#12531;&#12489;&#12398;&#32080;&#26524;&#12434;&#24341;&#25968;&#12408;&#26684;&#32013;
HeatMap1 <- Heatmap(TestData1)
HeatMap2 <- Heatmap(TestData2)
#&#25551;&#20889;
draw(HeatMap1 + HeatMap2)
########

###draw&#12467;&#12510;&#12531;&#12489;&#20351;&#29992;&#26178;&#12398;&#20307;&#35009;&#35519;&#25972;#####
#&#21508;&#12458;&#12503;&#12471;&#12519;&#12531;&#12399;Heatmap&#12467;&#12510;&#12531;&#12489;&#12392;&#20849;&#36890;
draw(HeatMap1 + HeatMap2, row_title = "Row title", row_title_gp = gpar(col = "blue"),
     column_title = "Column title", column_title_side = "bottom",
     column_title_gp = gpar(col = "red"))
########

###&#12450;&#12494;&#12486;&#12540;&#12471;&#12519;&#12531;&#20184;&#19982;#####
#HeatmapAnnotation&#12467;&#12510;&#12531;&#12489;
#&#31777;&#21336;&#12394;&#20363;
AnotationDF <- data.frame(type = c(rep("a", 2), rep("b", 2)))
#&#12450;&#12494;&#12486;&#12540;&#12471;&#12519;&#12531;&#12487;&#12540;&#12479;&#12398;&#20316;&#25104;
Anotation <- HeatmapAnnotation(df = AnotationDF)
#&#25551;&#20889;
draw(Anotation, 1:4)
#&#12450;&#12494;&#12486;&#12540;&#12471;&#12519;&#12531;&#12395;&#12399;anno_points(),anno_barplot(),
#anno_boxplot(),anno_histogram(),anno_density(),anno_text()
#&#12398;&#12467;&#12510;&#12531;&#12489;&#12391;&#12464;&#12521;&#12501;&#12362;&#12424;&#12403;&#12486;&#12461;&#12473;&#12488;&#12434;&#36861;&#21152;&#12391;&#12365;&#12414;&#12377;
#&#12464;&#12521;&#12501;&#12434;&#36861;&#21152;&#12375;&#12383;&#12450;&#12494;&#12486;&#12540;&#12471;&#12519;&#12531;&#12487;&#12540;&#12479;&#12398;&#20316;&#25104;
#&#19978;&#37096;&#34920;&#31034;&#29992;&#12487;&#12540;&#12479;&#12398;&#20316;&#25104;
TopAnotation <- HeatmapAnnotation(boxplot = anno_boxplot(as.matrix(TestData1)))
#&#25551;&#20889;
Heatmap(TestData1, top_annotation = TopAnotation)

出力例

コマンド例から一部を紹介

・kmオプション

km

・widthオプション

width

・drawコマンド

draw

・HeatmapAnnotationコマンド


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

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