作者:劉夢瑤 諾禾致源 微生物信息
審稿:劉永鑫 中國科學院遺傳與發育生物學研究所
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擴增子、宏基因組科研思路和分析實戰,關注「宏基因組」
點擊閱讀原文,跳轉最新文章目錄閱讀