利用ComplexHeatmap繪製熱圖(一)

利用ComplexHeatmap繪製熱圖(一)

來自專欄 R語言中文社區7 人贊了文章

作者簡介

taoyan:R語言中文社區特約作家,偽碼農,R語言愛好者,愛開源。

個人博客: ytlogos.github.io/

簡介

Complexheatmap是由顧祖光博士創建的繪製熱圖的R包,在他的GitHub有十分詳細的小品文(Vignettes)說明。Complexheatmap是基於繪圖系統grid,因此如果有相應grid的知識,學習起來應該更順手!

設計

Complexheatmap提供了一套非常靈活的方法用於多熱圖也就是熱圖列表布局以及支持自定義注釋繪圖,一個熱圖列表包含若干熱圖以及注釋信息

繪製單個熱圖

安裝

包的安裝就不細說了,有不懂的可以翻我以前的博客,裡面有詳細的教程,下面直接給出安裝代碼不解釋

# installed from bioconductor

source("bioconductor.org/biocLi")

options(BioC_mirror="mirrors.ustc.edu.cn/bio")

biocLite("ComplexHeatmap")

# installed from GitHub

if(!require(devtools)){install.packages("devtools")}

devtools::install_github("jokergoo/ComplexHeatmap")

創建數據集

pacman::p_load(ComplexHeatmap, circlize)

set.seed(7)

mat <- cbind(rbind(matrix(rnorm(16, -1),4), matrix(rnorm(32, 1), 8)), rbind(matrix(rnorm(24, 1), 4), matrix(rnorm(48, -1), 8)))

mat <- mat[sample(nrow(mat), nrow(mat)), sample(ncol(mat), ncol(mat))]

rownames(mat) <- paste0("R", 1:12)

colnames(mat) <- paste0("C", 1:10)

繪圖

ComplexHeatmap繪製熱圖十分簡單,使用默認參數

Heatmap(mat)

定製化

ComplexHeatmap十分靈活,可以自定義多種參數繪製熱圖

顏色

大多數情況下,繪製熱圖的矩陣都是連續性變數,通過提供顏色映射函數,我們可以自定義顏色,這主要是通過circlize包中的colorRamp2()函數來實現的,

mat2 <- matmat2[1,1] <- 100000Heatmap(mat2, col = colorRamp2(c(-3,0,3), c("green","white","red")), cluster_rows = FALSE, cluster_columns = FALSE)

可以看出,ComplexHeatmap對於異常值也能顯示出來,不會剔除掉

Heatmap(mat, col = rev(rainbow(10))

如果是離散型變數或者數值型、字元型變數的話,這時就需要特別指定顏色了

#離散型變數/數值型變數discrete_mat <- matrix(sample(1:4, 100, replace = TRUE), 10, 10)colors <- structure(circlize::rand_color(4), names=c("1","2","3","4"))Heatmap(discrete_mat, col = colors)

#字元型變數

character_mat <- matrix(sample(letters[1:4], 100, replace = TRUE), 10, 10)

colors <- structure(circlize::rand_color(4), names=letters[1:4])

Heatmap(character_mat, col = colors)

可以看出,對於離散型變數/數值型變數,默認對行/列進行聚類,而對於字元型變數,則不進行聚類

ComplexHeatmap允許數據中含有NA,只需要通過參數na_col來控制NA的顏色

mat_with_NA <- matmat_with_NA[sample(c(TRUE, FALSE), nrow(mat)*ncol(mat), replace = TRUE, prob = c(1,9))] <- NAHeatmap(mat_with_NA, na_col = "orange", clustering_distance_rows = "pearson")

ComplexHeatmap默認使用LAB顏色空間(LAB color space),colorRamp2()提供了選擇顏色空間的參數選項

f1 <- colorRamp2(seq(min(mat), max(mat), length=3), c("blue","#EEEEEE", "red"))f2 <- colorRamp2(seq(min(mat), max(mat), length=3), c("blue","#EEEEEE", "red"), space = "RGB")H1 <- Heatmap(mat, col = f1, column_title = "LAB color space")H2 <- Heatmap(mat, col = f2, column_title = "RGB color space")H1+H2

ComplexHeatmap提供了多種顏色空間選項,可以根據自身數據不斷調整,選取合適的顏色空間

標題

一個熱圖的標題有:圖標題、圖例標題、行列標題等

Heatmap里提供的name參數默認的是圖例的標題

Heatmap(mat, name = "legend")

圖裡標題可以通過heatmap_legend_param()進行修改

Heatmap(mat, heatmap_legend_param = list(title="legend"))

行列標題

Heatmap(mat, name = "legend", column_title = "Column", row_title = "Row")

Heatmap(mat, name = "legend", column_title = "Column", column_title_side = "bottom")

如果需要修改圖例參數,可以通過gpar()參數

Heatmap(mat, name = "legend",column_title = "Column", row_title = "Row", column_title_gp = gpar(fontsize=20, fontface="bold"), row_title_gp = gpar(fontsize=20, fontface="bold"))

標題可以旋轉(水平或豎直)

SessionInfo

sessionInfo()

## R version 3.4.4 (2018-03-15)## Platform: x86_64-w64-mingw32/x64 (64-bit)## Running under: Windows 10 x64 (build 16299)## ## Matrix products: default## ## locale:## [1] LC_COLLATE=Chinese (Simplified)_China.936 ## [2] LC_CTYPE=Chinese (Simplified)_China.936 ## [3] LC_MONETARY=Chinese (Simplified)_China.936## [4] LC_NUMERIC=C ## [5] LC_TIME=Chinese (Simplified)_China.936 ## ## attached base packages:## [1] grid stats graphics grDevices utils datasets methods ## [8] base ## ## other attached packages:## [1] circlize_0.4.3 ComplexHeatmap_1.17.1## ## loaded via a namespace (and not attached):## [1] Rcpp_0.12.16 digest_0.6.15 rprojroot_1.3-2 ## [4] backports_1.1.2 pacman_0.4.6 magrittr_1.5 ## [7] evaluate_0.10.1 GlobalOptions_0.0.13 stringi_1.1.7 ## [10] GetoptLong_0.1.6 rmarkdown_1.9 RColorBrewer_1.1-2 ## [13] rjson_0.2.15 tools_3.4.4 stringr_1.3.0 ## [16] yaml_2.1.18 compiler_3.4.4 colorspace_1.3-2 ## [19] shape_1.4.4 htmltools_0.3.6 knitr_1.20

weixin.qq.com/r/Lkyqssv (二維碼自動識別)

推薦閱讀:

TAG:數學 | 數據可視化 | R編程語言 |