作者:嚴濤 浙江大學作物遺傳育種在讀研究生(生物信息學方向)偽碼農,R語言愛好者,愛開源。
之前熱圖三部曲介紹了使用ggplot2和pheatmp繪製熱圖
R語言學習 - 熱圖繪製 (heatmap)
R語言學習 - 熱圖美化
R語言學習 - 熱圖簡化
後來2017年最後學習1010個熱圖繪製方法簡略介紹了10種熱圖繪製方式,CIRCOS增加熱圖、點圖、線圖和區塊屬性是另一種形式的熱圖。當然最簡單的還是使用高顏值可定製在線繪圖工具-第三版直接在線繪製。
知識學雜了也可以融會貫通,下面看看的Complexheatmap繪圖邏輯,應該會對理解數據、圖形、程序有些新的體會。
簡介Complexheatmap是由DKFZ的顧祖光博士創建的繪製熱圖的R包,基於繪圖系統grid,因此如果有相應grid的知識,學習起來應該更順手。在他的GitHub有十分詳細的說明
(https://github.com/jokergoo/ComplexHeatmap)。
設計Complexheatmap提供了一套非常靈活的方法用於多熱圖也就是熱圖列表布局以及支持自定義注釋繪圖,一個熱圖列表包含若干熱圖以及注釋信息。
繪製單個熱圖安裝包的安裝就不細說了,R語言學習 - 基礎概念和矩陣操作中有詳細的教程,下面直接給出安裝代碼。
# installed from bioconductorsource("http://bioconductor.org/biocLite.R")options(BioC_mirror="http://mirrors.ustc.edu.cn/bioc/")biocLite("ComplexHeatmap")
# 或者直接從Github安裝# installed from GitHubif(!require(devtools)){install.packages("devtools")}devtools::install_github("jokergoo/ComplexHeatmap")
# pacman::p_load加載包,若不存在會自動安裝
# 用在這不太合適,因為這個包是bioconductor的包,自動安裝是調用install.packages,
# 具體沒測試,可能會失敗
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)
# 常規矩陣就可以
mat
ComplexHeatmap繪製熱圖十分簡單,使用默認參數
# 大寫的H
Heatmap(mat)
ComplexHeatmap十分靈活,可以自定義多種參數繪製熱圖。
顏色大多數情況下,繪製熱圖的矩陣都是連續性變量,通過提供顏色映射函數,我們可以自定義顏色,顏色選擇和搭配見史上最全的圖表色彩運用原理。這主要是通過circlize包中的colorRamp2()函數來實現的。
mat2 <- matmat2[1,1] <- 100000
# 設置顏色,並且不做行列聚類Heatmap(mat2, col = colorRamp2(c(-3,0,3), c("green","white","red")), cluster_rows = FALSE, cluster_columns = FALSE)
試試彩虹色
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"))
標題可以旋轉(水平或豎直)
Heatmap(mat, name = "legend", row_title = "Row", row_title_rot = 0)
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
R統計和作圖更多閱讀畫圖三字經 生信視頻 生信系列教程
心得體會 癌症資料庫 Linux Python
高通量分析 在線畫圖 測序歷史 超級增強子
培訓視頻 PPT EXCEL 文章寫作 ggplot2
海哥組學 可視化套路 基因組瀏覽器
色彩搭配 圖形排版 互作網絡
後臺回復「生信寶典福利第一波」獲取教程合集