R包ComplexHeatmap繪製個性化熱圖

2021-03-02 宏基因組
使用ComplexHeatmap包繪製個性化熱圖

作者:劉夢瑤 諾禾致源 微生物信息

審稿:劉永鑫 中國科學院遺傳與發育生物學研究所

ComplexHeatmap包由顧祖光博士創建,是一個非常全面的繪製熱圖的R包,可以利用它來繪製許多文獻中的美圖,例如下圖展示的16S文獻分析中的熱圖。這裡主要介紹一下如何用這個R包來繪製類似的個性化熱圖。

檢測安裝加載包

# 檢測安裝CRAN包
package_list = c("circlize","grid","BiocManager")
for(p in package_list){
if (!requireNamespace(p, quietly = TRUE))
   install.packages(p)
}
# 檢測安裝bioconductor包
package_list = c("ComplexHeatmap")
for(p in package_list){
if (!requireNamespace(p, quietly = TRUE))
   BiocManager::install(p)
}

# 加載依賴包
library(circlize)
library(grid)
library(ComplexHeatmap)

創建測試數據集

可以按照的Bioconductor官網上ComplexHeatmap包的說明來創建一個測試數據(http://bioconductor.org/packages/release/bioc/vignettes/ComplexHeatmap/inst/doc/s2.single_heatmap.html )

# 設置隨機數種子,保證數據分析隨機過程可重複
set.seed(123)
# 生成模擬數據:12行成10列矩陣
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)

一行命令繪圖

使用默認參數,一行命令即可出圖

#默認對行和列都進行聚類
Heatmap(mat)

調參美化

下面我們通過參數設置來進行個性化熱圖定製。

使用HeatmapAnnotation函數可以構建注釋對象,我們可以進行自定義,也可以直接使用它的內置函數。

注釋按位置來分類可分為行注釋和列注釋,以列注釋為例,其內置函數按照圖形的類型可以分為6種,anno_points(),anno_barplot(),anno_boxplot(),anno_histogram(),anno_density(),anno_text()。

行注釋的內置函數和列注釋類似,前面加上row即可,如row_anno_points()。
詳細示例可參照網址:http://bioconductor.org/packages/release/bioc/vignettes/ComplexHeatmap/inst/doc/s4.heatmap_annotation.html 。

本文重點討論anno_points()的用法。

# 生成包含10個0.5數值的向量
value = rep(0.5,10)
# 設置值、形狀、大小、顏色等
ha = HeatmapAnnotation("type" = anno_points(value, pch=c(19,19,15,15,24,24,23,23,3,3), size = unit(7, "mm"),gp = gpar(col = c("#bf94e4","#bf94e4","#bf94e4","#bf94e4","#1dacd6","#1dacd6","#1dacd6","#1dacd6","red","red")),border=FALSE,ylim=c(0,1)),show_annotation_name = FALSE)

「type」為這一行注釋的名稱,show_annotation_name = FALSE,即不顯示名稱。pch可指定繪製點時使用的符號,共25種,如上三角,下三角,圓形,方形等,具體可見《R In Action》。size可指定符號的大小,gp可指定符號的顏色。

# 批量按行中心標準化,減均值除方差,Z-score
mat_scaled = apply(mat, 1, scale)
# 繼續原數據表列名
rownames(mat_scaled) = colnames(mat)
# 轉置才與原方向一致
mat_scaled = t(mat_scaled)
# 通過circlize包中的colorRamp2()函數,來自定義顏色
col_fun = circlize::colorRamp2(c(-3, 0, 3), c("black", "white", "yellow"))
# 新矩陣
shape<-mat_scaled
# 循環元素篩選,變為+或空,顯著標記常用
x<-nrow(mat_scaled)
y<-ncol(mat_scaled)
for(i in 1:x ){
       for (j in 1:y ){
       if(shape[i,j]>=1){
       shape[i,j]<-"+";} else{
       shape[i,j]<-"";
       }}}

如需對數據進行標準化,需使用apply函數來處理數據。我們可以通過circlize包中的colorRamp2()函數,來自定義顏色。對mat_scaled的數值進行篩選,生成一個符號是加號或空值的新數據框。這一部分可以根據作圖要求來自定義。

P1=Heatmap(mat_scaled,
name = "hello",
top_annotation = ha,
col = col_fun,
rect_gp = gpar(col = "black",lty = 2, lwd = 1),
cell_fun = function(j, i, x, y, width, height, fill) {grid.text(shape[i,j], x = x, y = y,gp = gpar(fontsize = 10,col="red"))},
cluster_rows = FALSE,
cluster_columns = FALSE,
row_names_side = "left",
column_names_side="bottom",
row_names_gp = gpar(col = c("#8B7500","#8B7500","#8B7500","#8B7500","#8B7500","#8B7500","#0000FF","#0000FF","#0000FF","#0000FF","#0000FF","#0000FF")))

name可定義圖例的名稱。top_annotation 可引用上面定義好的列注釋, 並將列注釋放在heatmap上方;bottom_annotation 則將列注釋放在heatmap下方。rect_gp定義小方格的邊框顏色,線條類型及寬度。cell_fun可以對heatmap的每個小方格進行自定義,這裡用其來顯示」+」號,也可以顯示數字等。cluster_rows和cluster_columns可定義是否聚類。row_names_side可定義行名的顯示位置,默認值right。column_names_side可定義列名的顯示位置,默認值bottom。row_names_gp可定義列名的顏色。

# 行名第一列
texta = c("A","B","C","D","EEEEE","F","G","H","I","J","K","L")
# 行注釋,寬度為最大文本
ha_texta =rowAnnotation(text = row_anno_text(texta), width = max_text_width(texta))
# 行名第二列
textb = c("M","N","O","P","Q","R","S","T","U","V","W","X")
ha_textb =rowAnnotation(text = row_anno_text(textb), width = max_text_width(textb))
# 添加行名注釋
ht_list = P1 + ha_texta + ha_textb
# 添加圖例對應文字、形狀和顏色
lgd = legendGrob(c("A","B","C","D","E"), pch = c(19,15,24,23,3),gp= gpar(col =c("#bf94e4","#bf94e4","#1dacd6","#1dacd6","red")))
# 繪圖,添加熱圖圖例左,注釋圖例
draw(ht_list,heatmap_legend_side = "left",annotation_legend_list = list(lgd))

rowAnnotation中max_text_width可計算得到列名中最長的文本寬度,legendGrob可自定義圖例的名稱,形狀,顏色。

猜你喜歡

10000+:菌群分析 寶寶與貓狗 梅毒狂想曲 提DNA發Nature Cell專刊 腸道指揮大腦

系列教程:微生物組入門 Biostar 微生物組  宏基因組

專業技能:學術圖表 高分文章 生信寶典 不可或缺的人

一文讀懂:宏基因組 寄生蟲益處 進化樹

必備技能:提問 搜索  Endnote

文獻閱讀 熱心腸 SemanticScholar Geenmedical

擴增子分析:圖表解讀 分析流程 統計繪圖

16S功能預測   PICRUSt  FAPROTAX  Bugbase Tax4Fun

在線工具:16S預測培養基 生信繪圖

科研經驗:雲筆記  雲協作 公眾號

編程模板: Shell  R Perl

生物科普:  腸道細菌 人體上的生命 生命大躍進  細胞暗戰 人體奧秘  

寫在後面

為鼓勵讀者交流、快速解決科研困難,我們建立了「宏基因組」專業討論群,目前己有國內外5000+ 一線科研人員加入。參與討論,獲得專業解答,歡迎分享此文至朋友圈,並掃碼加主編好友帶你入群,務必備註「姓名-單位-研究方向-職稱/年級」。PI請明示身份,另有海內外微生物相關PI群供大佬合作交流。技術問題尋求幫助,首先閱讀《如何優雅的提問》學習解決問題思路,仍末解決群內討論,問題不私聊,幫助同行。

學習16S擴增子、宏基因組科研思路和分析實戰,關注「宏基因組」

點擊閱讀原文,跳轉最新文章目錄閱讀

相關焦點

  • 使用ComplexHeatmap包繪製個性化熱圖
    使用ComplexHeatmap包繪製個性化熱圖作者:劉夢瑤 諾禾致源 微生物信息審稿:劉永鑫 中國科學院遺傳與發育生物學研究所
  • 利用ComplexHeatmap繪製熱圖(一)
    之前熱圖三部曲介紹了使用ggplot2和pheatmp繪製熱圖R語言學習 - 熱圖繪製 (heatmap)  R語言學習 - 熱圖美化  R語言學習 - 熱圖簡化後來2017年最後學習1010個熱圖繪製方法簡略介紹了10種熱圖繪製方式,CIRCOS增加熱圖、點圖、線圖和區塊屬性是另一種形式的熱圖。
  • complexHeatmap版本的對角線熱圖
    寫在前面這幾天看到一直有人在重複這個圖,之前看到過base plot的版本,看到過ggplot2的版本。這裡就把之前使用complexheatmap繪製的版本也拿來和大家分享一下。主要操作加載包注意:ComplexHeatmap包的安裝需要安裝github版本的。
  • ComplexHeatmap |理解繪圖邏輯繪製熱圖
    之前熱圖三部曲介紹了使用ggplot2和pheatmp繪製熱圖R語言學習 - 熱圖繪製 (heatmap)  R語言學習 - 熱圖美化  R語言學習 - 熱圖簡化後來2017年最後學習1010個熱圖繪製方法簡略介紹了10種熱圖繪製方式,CIRCOS增加熱圖、點圖、線圖和區塊屬性是另一種形式的熱圖。
  • 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()函數現在有一個新的參數graphics,其接受一個函數列表,其中每一個函數定義如何繪製當前的legend,如下圖所示。
  • R語言學習 - 熱圖簡化
    前面推出過熱圖繪製和熱圖美化,現在來一個函數繪製熱圖的簡化方式。文後更有不用寫代碼的在線工具可用。
  • 生信分析系列 | 輕鬆利用Python繪製基因表達熱圖
    (閱讀本文需要簡單了解python中的函數、python模組的安裝與模組的調用)文末有驚喜,免費Python信息分析培訓班送給你哦Python是當下數據科學主流程式語言之一。(可使用pip命令或anaconda下載對應的python模組。
  • 【Python可視化6】Seaborn之heatmap熱力圖
    它提供了一個高級界面來繪製有吸引力的統計圖形。Seaborn其實是在matplotlib的基礎上進行了更高級的API封裝,從而使得作圖更加容易,不需要經過大量的調整就能使你的圖變得精緻。可以看到右側的顏色帶最大最小值變了,而heatmap中顏色映射關係也會隨之調整,將本圖和上面的圖進行對比便一目了然。
  • Python可視化 | Seaborn5分鐘入門(六)——heatmap熱力圖
    它提供了一個高級界面來繪製有吸引力的統計圖形。Seaborn其實是在matplotlib的基礎上進行了更高級的API封裝,從而使得作圖更加容易,不需要經過大量的調整就能使你的圖變得精緻。可以看到右側的顏色帶最大最小值變了,而heatmap中顏色映射關係也會隨之調整,將本圖和上面的圖進行對比便一目了然。
  • 【R畫圖】使用R繪製其他圖形之熱圖及網絡圖
    heatmap()函數繪製,也可以通過ggplot2包中的geom_tile()函數或geom_raster()函數繪製,這裡就以ggplot2包中的函數為例:library(ggplot2)#使用geom_tile()函數ggplot(data = df, mapping = aes(x = Year, y = Quater,
  • 5步上手教你繪製Heatmap
    在這篇文章裡,我會帶著你通過五個簡單步驟,自己繪製一張標註好數據值的相關矩陣的Heatmap。導入數據創建相關矩陣設置隱藏上三角矩陣使用Seaborn包創建Heatmap導出Heatmapdf = pd.read_csv(「Highway1.csv」, index_col = 0)
  • 一個heatmap是如何練成的!(後附視頻解析)
    Heatmap(熱圖)大家肯定不陌生,在很多醫學、自然科學發表的重量級論文中常見其蹤影。
  • 用R 的pheatmap畫熱圖
    R裡面也有很多畫熱圖的函數,最常用的是heatmap,heatmap.2和pheatmap。個人認為pheatmap是非常不錯的一個畫熱圖的函數,操作起來比前兩個方便好用的多。在別的公眾號裡面也看到一些關於用這個函數畫熱圖的文章,但是有一些小問題小編覺得需要了解,下面聽小編一一講解。
  • 使用seaborn繪製熱圖
    除了統計圖表外,seaborn也可以繪製熱圖,而且支持聚類樹的繪製,繪製熱圖有以下兩個函數相比matplotlib的imshow功能,該函數提供了更加簡潔的接口,可以輕鬆實現文字注釋的添加等功能,基本用法如下>>> import numpy as np>>> data = np.random.rand
  • R語言繪製條形圖
    作者:吳健 中國科學院大學 R語言、統計學愛好者,尤其擅長R語言和Arcgis在生態領域的應用分享個人公眾號:統計與程式語言
  • 熱圖「霸屏」的測序時代,如何完成高顏值的熱圖操作
    另一方面,「高顏值」的圖形總是能夠吸引和提起工作者的閱讀興趣。熱圖,是一種不可或缺的展現晶片和測序結果的方式,這種圖在文章中非常常見,不論是高影響因子還是低影響因子的文章,都會選擇用熱圖作為一種結果展現方法。
  • R語言可視化學習筆記之ggridges包繪製山巒圖
    嚴濤老師的繪圖教程還有:gganimate |諾獎文章裡面的動圖繪製教程來了!!ggplot2學習筆記之圖形排列R包ggseqlogo |繪製序列分析圖ggplot2高效實用指南 (可視化腳本、工具、套路、配色)簡介ggridges包主要用來繪製山巒圖。
  • R語言ggplot繪製峰巒圖繪製
    峰巒圖繪製清除當前環境中的變量rm(list=ls())設置工作目錄setwd("C:/Users/Dell/Desktop/R_Plots/19ridge/")使用ggridges包繪製峰巒圖3.1 1.5 0.2 setosa## 5 5.0 3.6 1.4 0.2 setosa## 6 5.4 3.9 1.7 0.4 setosa# 使用geom_density_ridgesh函數繪製峰巒圖
  • 圖形解讀系列 | 給你5個示例,你能看懂常用熱圖使用嗎?
    來源:https://datavizcatalogue.com/methods/heatmap.html  在使用顏色可視化數值表格的基礎上,熱圖可以增加行和列的色塊展示相關的行或列注釋信息,如展示樣品的取樣部位、取樣人、樣品性別等屬性,樣品聚類熱圖配合樣品來源的批次信息是初步判斷樣品受批次效應影響程度的一個方式,如下面宏基因組菌群圖譜熱圖所示。