利用ComplexHeatmap繪製熱圖(一)

2021-03-05 生信寶典

作者:嚴濤 浙江大學作物遺傳育種在讀研究生(生物信息學方向)偽碼農,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

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

海哥組學 可視化套路 基因組瀏覽器

色彩搭配 圖形排版 互作網絡

後臺回復「生信寶典福利第一波」獲取教程合集

相關焦點

  • complexHeatmap版本的對角線熱圖
    寫在前面這幾天看到一直有人在重複這個圖,之前看到過base plot的版本,看到過ggplot2的版本。這裡就把之前使用complexheatmap繪製的版本也拿來和大家分享一下。主要操作加載包注意:ComplexHeatmap包的安裝需要安裝github版本的。
  • ComplexHeatmap |理解繪圖邏輯繪製熱圖
    之前熱圖三部曲介紹了使用ggplot2和pheatmp繪製熱圖R語言學習 - 熱圖繪製 (heatmap)  R語言學習 - 熱圖美化  R語言學習 - 熱圖簡化後來2017年最後學習1010個熱圖繪製方法簡略介紹了10種熱圖繪製方式,CIRCOS增加熱圖、點圖、線圖和區塊屬性是另一種形式的熱圖。
  • R包ComplexHeatmap繪製個性化熱圖
    使用ComplexHeatmap包繪製個性化熱圖作者:劉夢瑤 諾禾致源 微生物信息審稿:劉永鑫 中國科學院遺傳與發育生物學研究所
  • 使用ComplexHeatmap包繪製個性化熱圖
    使用ComplexHeatmap包繪製個性化熱圖作者:劉夢瑤 諾禾致源 微生物信息審稿:劉永鑫 中國科學院遺傳與發育生物學研究所
  • R語言熱力圖綜合教程-heatmap、d3heatmap和ComplexHeatmap
    R包和功能很多,包括:heatmap()[R基本函數,統計數據包]:繪製一個簡單的熱圖heatmap.2()[ gplots R包]:與R base函數相比,繪製了增強的熱圖。pheatmap()[ pheatmap R包]:繪製漂亮的熱圖,並提供更多控制項來更改熱圖的外觀。d3heatmap()[ d3heatmap R包]:繪製交互式/可單擊的熱圖ComplexHeatmap R / Bioconductor的包]:繪製,注釋和排列複雜熱圖(用於基因組數據分析是非常有用的)
  • ComplexHeatmap中legend的新功能
    在文末你可以看到一個包含了熱圖的完整例子。離散值的legend如果legend中的label文字超過一行的,如下所示,多行文字所對應的legend的格子會自動延長。legend,如下圖所示。這個功能一般用戶可能用不到,但是在ComplexHeatmap中主要應用在繪製oncoPrint的legend上,現在在oncoPrint()函數中,所有用戶定義在alter_fun中的圖形都會被自動繪製到legend中。
  • 生信分析系列 | 輕鬆利用Python繪製基因表達熱圖
    (閱讀本文需要簡單了解python中的函數、python模組的安裝與模組的調用)文末有驚喜,免費Python信息分析培訓班送給你哦Python是當下數據科學主流程式語言之一。下面讓我們一步一步了解如何繪製一幅自定義風格的熱圖:(可使用pip命令或anaconda下載對應的python模組。
  • 一個heatmap是如何練成的!(後附視頻解析)
    Heatmap(熱圖)大家肯定不陌生,在很多醫學、自然科學發表的重量級論文中常見其蹤影。
  • 5步上手教你繪製Heatmap
    在這篇文章裡,我會帶著你通過五個簡單步驟,自己繪製一張標註好數據值的相關矩陣的Heatmap。把它帶入相關矩陣上以後,我們就能得到如下圖的全零數組。dtype=np.bool參數覆蓋了原本的數據類型,所以我們現在的數組都是布爾值。np.triu_indices_from(mask) 返回了數組上三角矩陣的位置。
  • R語言學習 - 熱圖簡化
    前面推出過熱圖繪製和熱圖美化,現在來一個函數繪製熱圖的簡化方式。文後更有不用寫代碼的在線工具可用。
  • 【Python可視化6】Seaborn之heatmap熱力圖
    它提供了一個高級界面來繪製有吸引力的統計圖形。Seaborn其實是在matplotlib的基礎上進行了更高級的API封裝,從而使得作圖更加容易,不需要經過大量的調整就能使你的圖變得精緻。從上面的heatmap中我們可以得到兩層信息,一是隨著時間的推移,飛機的乘客數量是在逐步增多的,二是航班的乘坐旺季在七月和八月份。下面就具體的參數進行演示。
  • Python可視化 | Seaborn5分鐘入門(六)——heatmap熱力圖
    它提供了一個高級界面來繪製有吸引力的統計圖形。Seaborn其實是在matplotlib的基礎上進行了更高級的API封裝,從而使得作圖更加容易,不需要經過大量的調整就能使你的圖變得精緻。從上面的heatmap中我們可以得到兩層信息,一是隨著時間的推移,飛機的乘客數量是在逐步增多的,二是航班的乘坐旺季在七月和八月份。下面就具體的參數進行演示。
  • 圖形解讀系列 | 給你5個示例,你能看懂常用熱圖使用嗎?
    熱圖是一種很常見的圖,其基本原則是用顏色代表數字,讓數據呈現更直觀、對比更明顯。常用來表示不同樣品組代表性基因的表達差異、不同樣品組代表性化合物的含量差異、不同樣品之間的兩兩相似性。實際上,任何一個表格數據都可以轉換為熱圖展示。熱圖基本解讀熱圖通過將數據矩陣中的各個值按一定規律映射為顏色展示,利用顏色變化來可視化比較數據。
  • 熱圖「霸屏」的測序時代,如何完成高顏值的熱圖操作
    另一方面,「高顏值」的圖形總是能夠吸引和提起工作者的閱讀興趣。熱圖,是一種不可或缺的展現晶片和測序結果的方式,這種圖在文章中非常常見,不論是高影響因子還是低影響因子的文章,都會選擇用熱圖作為一種結果展現方法。
  • 【R畫圖】使用R繪製其他圖形之熱圖及網絡圖
    )Quater <- rep(c('Q1','Q2','Q3','Q4'), times = 10)Counts <- round(runif(40, min = 10, max = 200))df <- data.frame(Year = Year, Quater = Quater, Counts = Counts)熱力圖可以通過stats包的heatmap
  • 使用seaborn繪製熱圖
    除了統計圖表外,seaborn也可以繪製熱圖,而且支持聚類樹的繪製,繪製熱圖有以下兩個函數相比matplotlib的imshow功能,該函數提供了更加簡潔的接口,可以輕鬆實現文字注釋的添加等功能,基本用法如下>>> import numpy as np>>> data = np.random.rand
  • 用Seaborn繪製圖表
    Seaborn可以很好地處理數據幀,而Matplotlib則不行,它可以讓你以更簡單的方式繪製引人注目的圖表。熱圖熱圖幫助你可視化矩陣類型的數據。例如,我們可以將口袋妖怪不同屬性之間的所有關聯可視化。讓我們通過調用「corr」函數來計算數據幀的相關性,並使用「heatmap」函數繪製熱圖。
  • 用R 的pheatmap畫熱圖
    R裡面也有很多畫熱圖的函數,最常用的是heatmap,heatmap.2和pheatmap。個人認為pheatmap是非常不錯的一個畫熱圖的函數,操作起來比前兩個方便好用的多。在別的公眾號裡面也看到一些關於用這個函數畫熱圖的文章,但是有一些小問題小編覺得需要了解,下面聽小編一一講解。
  • 利用電腦繪製思維導圖有什麼優勢?手把手教你繪製思維導圖方法
    思維導圖的繪製分為手繪與電腦繪製兩種,相信後者的使用人數更加的多,利用一些專業的電腦繪圖工具進行繪製操作相對於簡單方便一點,優勢略高點。下面為大家講述一種繪製方法,希望可以讓大家認識不同的繪製技巧。利用電腦繪製思維導圖有哪些優勢:1.繪製時間短,便於修改利用電腦繪製思維導圖對需要的節點直接添加即可,並且在繪製的過程中出現錯誤直接將該節點下的內容進行刪除即可,而使用手繪這張思維導圖只能重新繪製。
  • 用數據可視化工具Seaborn繪製圖表
    Seaborn可以很好地處理數據幀,而Matplotlib則不行,它可以讓你以更簡單的方式繪製引人注目的圖表。為了更好地理解本文,你需要了解pandas和matplotlib的基礎知識。熱圖熱圖幫助你可視化矩陣類型的數據。例如,我們可以將口袋妖怪不同屬性之間的所有關聯可視化。讓我們通過調用「corr」函數來計算數據幀的相關性,並使用「heatmap」函數繪製熱圖。