R包ComplexHeatmap繪製個性化熱圖

2021-01-18 宏基因組
使用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版本的對角線熱圖
    寫在前面這幾天看到一直有人在重複這個圖,之前看到過base plot的版本,看到過ggplot2的版本。這裡就把之前使用complexheatmap繪製的版本也拿來和大家分享一下。主要操作加載包注意:ComplexHeatmap包的安裝需要安裝github版本的。很多函數在bioconductor版本沒有。
  • 一個heatmap是如何練成的!(後附視頻解析)
    Heatmap(熱圖)大家肯定不陌生,在很多醫學、自然科學發表的重量級論文中常見其蹤影。
  • 學R語言太難?薦你一款heatmap作圖神器
    特別福利:關註解螺旋微信號,回復關鍵詞"05月",可索取2016年5月資源包:UCSC+TCGA資料庫教程作者
  • TCGA|根據somatic mutation繪製突變景觀圖(oncoplot)和基因詞雲
    > 使用 XENA下載的TCGA-LAML.mutect2_snv.tsv文件繪製基因詞雲和突變景觀圖
  • SNP連鎖不平衡圖(LD)可視化R包LDheatmap的使用
    LDheatmap就是這樣一個能夠可視化SNPs之間連鎖不平衡關係的R包。先舉個小例子:隨機創建100個樣本5個SNPs的基因型矩陣,並實現LD熱圖:rm(list=ls())set.seed(1)gdat<-matrix(rbinom(n=500,size=2,prob=.5),ncol=5) require(chopsticks)gdat<-as(gdat,"snp.matrix
  • python-高維數據型圖表--熱力圖、樹形圖
    熱力圖熱力圖(heat map)一種將規則化矩陣數據轉換成顏色色調的常用的可視化方法;每個單元對應數據的某些屬性;屬性的值通過顏色映射轉換為不同色調並填充規則單元;表格坐標的排列和順序都可以通過參數控制;適合的坐標排列和順序可以很好地發現數據的不同性質;繪製熱力圖樹形圖
  • 破解oncomine無法免費下載數據,學員開發了一款R語言包(附教程)
    而今日我就將Oncomine的數據下載、R語言包Oncomine的具體使用教程分享給大家,與君共勉。打開Oncomine網頁,在基因搜索框內輸入EGFR,再輸入Bladder Cancer,可進入到一個條形型圖的網頁,當把滑鼠放在條形圖上時,會出現黃色的浮標,來提示一些數據信息,此為我們要獲取的數據。
  • Python學習筆記:繪製極坐標圖和散點圖的繪製與保存
    1.簡單極坐標圖#導入繪製極圖所需要的包import matplotlib.pyplot as pltimport numpy as np#設置下面所需要的參數barSlices = 12#theta指每個標記所在射線與極徑的夾角,下面表示均分角度theta = np.linspace(0.0
  • R語言可視化之UpSetR包
    今天介紹一個R包UpSetR,專門用來集合可視化,來源於UpSet,Python裡面也有一個相似的包py-upset。此外還有個UpSetR shiny app以及原始碼.UpSetR內置的數據集movies來繪製。
  • 利用R語言進行層次聚類分析以及繪製樹狀圖
    樹形圖(dendrogram)是表示樹的圖。
  • 如何用R繪製精美的散點圖
    R可以繪製出很棒的統計圖形,之前我們介紹了用R繪製柱狀圖。今天,小編帶著小夥伴們一起來了解下散點圖的繪製。小編自己看代碼的時候也覺得枯燥乏味,看圖片比看代碼輕鬆多了。所以我們先上圖。上圖就是通過R繪製出的散點圖,看起來也很漂亮。那麼,這種散點圖是如何繪製的呢?感興趣的小夥伴就請繼續看下面的代碼。
  • R語言 | R語言繪製抖動散點圖和蜂群圖
    本篇通過R語言自帶的一個小數據集,展示使用ggplot2包
  • 使用Pandas,Seaborn和Plotly繪製漂亮的圖表
    目錄· 我的Python繪圖歷史· 分布的重要性· 加載數據和包導入· 快速:使用Pandas進行基本繪圖· 漂亮:與Seaborn的高級繪圖· 很棒:使用plotly創建出色的交互式圖我使用Python繪圖的歷史大約兩年前,我開始更認真地學習Python。
  • R語言繪製動態圖
    ./")總結一下:這張圖其實應該在上面的循環中應該繪製一樣的大小,然後在合併圖片的時候才能展示出比較好的結果。title = 'Year: {frame_time}', x = 'GDP per capita', y = 'life expectancy') + transition_time(year) + ease_aes('linear')anim_save("gganimate1.gif")總結一下:gganimate包的使用參數還是很多的
  • 用R繪製最完整中國地圖
    我們前邊用三篇推文介紹了用R對世界地圖搭配數據的繪製,分別是:用ggplot2包繪製主要地區和城市的疫情格局:用tmap包繪製國家/地區水平的整體情況:如何用R繪製新冠病毒世界格局(二)(附完整代碼)。
  • 用Seaborn繪製圖表
    Seaborn可以很好地處理數據幀,而Matplotlib則不行,它可以讓你以更簡單的方式繪製引人注目的圖表。小提琴圖小提琴圖與箱線圖相似。小提琴圖是箱線圖非常有用的替代品。它們通過小提琴的厚度來顯示分布,而不只是簡要的統計。眾所周知,小提琴圖在分析和可視化數據集中不同屬性的分布時非常方便。在本例中,我們將使用上一個示例中的相同數據幀副本。
  • R語言中使用stem函數繪製莖葉圖
    前面的文章中介紹了均值、方差、全距、幾何平均數等的計算方法,還給出了繪製條形圖,直方圖,散點圖,餅圖,箱線圖等的繪製方法,本文將介紹統計學中的另外一種圖的繪製方法:莖葉圖。歡迎感興趣的讀者關注本號,本號會詳細介紹R在各個方面的使用方法。
  • R語言繪圖 | R繪製火山圖 EnhancedVolcano+ggplot
    火山圖其實是一種很形象的叫法,它可以通過關注對象的落點從而直觀地展示該對象的所屬區域。其通常用於展示差異結果,比如RNA-seq差異基因展示。讀懂了「火山」火星噴射的落點橫縱坐標意義,就讀懂了火山圖:R繪製火山圖下面就進入主題,用R繪製火山圖,我們的教程小白也能看懂哦😊!R包:Enhanced Volcano Plot的實例操作解說 EnhancedVolcano by Kevin Blighe1. 安裝if (!
  • 聚類樹和PCA等排序圖的組合繪製
    , col = NA) #添加聚類,如 UPGMA 聚類tree <- hclust(dist(scale(dat), method = 'euclidean'), method = 'average')plot(tree) ordicluster(p, tree, col = 'gray')排序圖繪製以二維散點圖