如何讓你的圖變得高大上之ComplexHeatmap()

ComplexHeatmap是Zuguang Gu博士開發的一款可以繪制復雜熱圖的一個包,即可實現簡單熱圖的功能,更能繪制更復雜的熱圖。復雜的熱圖有效地可視化不同數據集源之間的關聯并揭示潛在模式。ComplexHeatmap包提供了一種高度靈活的方式來排列多個熱圖并支持各種注釋圖形。

簡介篇

本文所有內容引用:Zuguang Gu, Roland Eils and Matthias Schlesner,?Complex heatmaps reveal patterns and correlations in multidimensional genomic data, Bioinformatics, 2016

圖1 甲基化圖譜的繪制

圖2 甲基化、表達譜及其他基因組屬性相關性繪圖

圖3 Upset plot

安裝篇

1)可從?Bioconductor獲得:

if?(!requireNamespace(“BiocManager”,?quietly=TRUE))
install.packages(“BiocManager”)
BiocManager::install(“ComplexHeatmap”)

2)從Bioconductor下載ComplexHeatmap_1.18.1.tar.gz,然后:

install.packages(“ComplexHeatmap_1.18.1.tar.gz”)

3)最新版本可從GitHub上獲得:

library(devtools);
install_github(“jokergoo/ComplexHeatmap”)

總而言之,請費盡心機把這個包安裝到你的R中

參數詳情篇

為了方便閱讀,小編對R中該包的主要功能函數Heatmap()的參數做了一個簡單的翻譯,也希望能幫到大家。

Heatmap(matrix,?col,?name,?
#matrix:數字或字符型矩陣(可以是離散或連續型數值)
#col:定義熱圖顏色,對離散型數據,col可以是一個向量;對連續型數據,col可以是一個函數,也可以用colorRamp2?函數生成
#name:熱圖圖例名稱
na_col?=?“grey”,
#ComplexHeatmap允許數據中含有NA,需要通過參數na_col來控制NA的顏色
color_space?=?“LAB”,
#當矩陣是數值型矩陣,col是一個向量時,控制內插顏色
rect_gp?=?gpar(col?=?NA),
#rect_gp:熱圖體區矩形的參數,如設置舉行邊框為白色
cell_fun?=?NULL,
#cell_fun:自定義在cell中增加繪圖項的函數。7個參數:i(row?index,矩陣中的行index),?j(column?index,矩陣中的列index),?x,y(熱圖體區中中間點的坐標),width,height(cell的寬度和高度),fill(cell的填充顏色)
row_title?=?character(0),
#row_title:行標題
row_title_side?=?c(“left”,?“right”),
#row_title_side:行標題位置,左(“left”),右(“right”)
row_title_gp?=?gpar(fontsize?=?14),
#row_title_gp:設置行標題的文本屬性,此處為字體大小為14
row_title_rot?=?switch(row_title_side[1],?“left”?=?90,?“right”?=?270),
#row_title_rot:行標題的旋轉角度,可選為0,90,270
column_title?=?character(0),
#column_title:列標題
column_title_side?=?c(“top”,?“bottom”),
#column_title_side:列標題位置,上(“top”),下(“bottom”)
column_title_gp?=?gpar(fontsize?=?14),
#column_title_gp:設置列標題的文本屬性
column_title_rot?=?0,
#column_title_rot:列標題的旋轉角度,可選為0,90,270
cluster_rows?=?TRUE,
#cluster_rows:是否行聚類
clustering_distance_rows?=?“euclidean”,
#clustering_distance_rows:行聚類的距離方法,默認為“euclidean”,也可以為自定義函數
clustering_method_rows?=?“complete”,、
#clustering_method_rows:行聚類的方法,默認為“complete”,可參考hclust
row_dend_side?=?c(“left”,?“right”),
#row_dend_side:行聚類樹位置,左(“left”),右(“right”)
row_dend_width?=?unit(10,?“mm”),
#row_dend_width:行聚類樹的寬度,unit對象
show_row_dend?=?TRUE,
#show_row_dend:是否展示行聚類樹
row_dend_reorder?=?TRUE,
#row_dend_reorder:對行重新排序,該值可以是邏輯值或包含用于重新排序行的權重的向量
row_dend_gp?=?gpar(),
#row_dend_gp:繪圖線的圖形參數。如果已經提供了帶有邊渲染的樹形圖對象,則該參數將被忽略。
row_hclust_side?=?row_dend_side,
#row_hclust_side:已棄用
row_hclust_width?=?row_dend_width,
#row_hclust_width:已棄用
show_row_hclust?=?show_row_dend,
#show_row_hclust:已棄用
row_hclust_reorder?=?row_dend_reorder,
#row_hclust_reorder:已棄用
row_hclust_gp?=?row_dend_gp,
#row_hclust_gp:已棄用
cluster_columns?=?TRUE,
#cluster_columns:是否列聚類
clustering_distance_columns?=?“euclidean”,
#clustering_distance_columns:列聚類的距離方法,也可以為自定義函數
clustering_method_columns?=?“complete”,
#clustering_method_columns:列聚類方法,可參考hclust
column_dend_side?=?c(“top”,?“bottom”),
#column_dend_side:列聚類樹位置,上(“top”),下(“bottom”)
column_dend_height?=?unit(10,?“mm”),
#column_dend_height:行聚類樹的高度,unit對象
show_column_dend?=?TRUE,
#show_column_dend:是否展示列聚類樹
column_dend_gp?=?gpar(),
#column_dend_gp:繪圖線的圖形參數。如果已經提供了帶有邊渲染的樹形圖對象,則該參數將被忽略。
column_dend_reorder?=?TRUE,
#column_dend_reorder:對列重新排序,該值可以是邏輯值或包含用于重新排序列的權重的向量
column_hclust_side?=?column_dend_side,
#column_hclust_side:已棄用
column_hclust_height?=?column_dend_height,
#column_hclust_height:已棄用
show_column_hclust?=?show_column_dend,
#show_column_hclust:已棄用
column_hclust_gp?=?column_dend_gp,
#column_hclust_gp:已棄用
column_hclust_reorder?=?column_dend_reorder,
#column_hclust_reorder:已棄用
row_order?=?NULL,
#row_order:行的順序。如果選擇此熱圖作為主熱圖,則可以輕松調整熱圖列表的行順序。手動設置行順序應關閉群集
column_order?=?NULL,
#column_order:列的順序。它可以輕松調整矩陣和列注釋的列順序
row_names_side?=?c(“right”,?“left”),
#row_names_side:行名稱位置。
show_row_names?=?TRUE,
#show_row_names:是否展示行名稱
row_names_max_width?=?default_row_names_max_width(),
#row_names_max_width:行名稱的最大寬度。因為某些時候行名稱可能很長,所以顯示它們都是不合理的。
row_names_gp?=?gpar(fontsize?=?12),
#row_names_gp:行名稱文本屬性
column_names_side?=?c(“bottom”,?“top”),
#column_names_side:列名稱位置
show_column_names?=?TRUE,
#show_column_names:是否展示列名稱
column_names_max_height?=?default_column_names_max_height(),
#column_names_max_height:行名稱的最大寬度。
column_names_gp?=?gpar(fontsize?=?12),
#column_names_gp:列名稱文本屬性
top_annotation?=?new(“HeatmapAnnotation”),
#top_annotation:用HeatmapAnnotation函數構建的注釋對象,在頂部添加注釋信息
[email protected],
#top_annotation_height:頂部注釋信息展示的總高度
bottom_annotation?=?new(“HeatmapAnnotation”),
#bottom_annotation:用HeatmapAnnotation函數構建的底部注釋對象
[email protected],
#bottom_annotation_height:底部注釋信息展示的總高度
km?=?1,
#km:對行做k-means聚類的類數,若k>1,熱圖會根據k-means聚類對行進行分裂,對每個cluster,進行層次聚類
km_title?=?“cluster%i”,
#km_title:設置km時每個cluster的行標題。它必須是格式為“。*%i。*”的文本,其中“%i”由cluster的索引替換
split?=?NULL,
#split:行按照split定義的向量或者數據框進行分裂。但是,如果cluster_rows是聚類對象,則split可以是單個數字,表示將根據樹上的拆分來拆分行
gap?=?unit(1,?“mm”),
#gap:如果熱圖按行分割,則行切片之間的間隙應為單位對象。如果是矢量,則熱圖中的順序對應于從上到下
combined_name_fun?=?function(x)?paste(x,?collapse?=?“/”),
#combined_name_fun:如果熱圖按行分割,如何為每個切片創建組合行標題??此函數的輸入參數是一個向量,它包含split中每列下的級別名稱。
width?=?NULL,
#width:單個熱圖的寬度應該是固定的單位對象。?當熱圖附加到熱圖列表時,它用于布局。
show_heatmap_legend?=?TRUE,
#show_heatmap_legend:是否展示圖例
heatmap_legend_param?=?list(title?=?name),
#heatmap_legend_param:熱圖圖例設置(標題,位置,方向,高度等)參數列表,詳情可見color_mapping_legend,ColorMapping-method。例如:heatmap_legend_param?=?list(title=?“legend”,?title_position?=”topcenter”,
legend_height=unit(8,”cm”),legend_direction=”vertical”)
use_raster?=?FALSE,
#use_raster:是否將熱圖圖像體渲染為光柵圖像。當矩陣很大時,它有助于減小文件大小。如果設置了cell_fun,則強制use_raster為FALSE
raster_device?=?c(“png”,?“jpeg”,?“tiff”,?“CairoPNG”,?“CairoJPEG”,?“CairoTIFF”),
#raster_device:用于生成光柵圖像的圖形設備
raster_quality?=?2,
#raster_quality:設置為大于1的值將改善光柵圖像的質量。
raster_device_param?=?list()
#raster_device_param:所選圖形設備的其他參數列表。
)

實操篇

1)首先構建測試數據集

mat?=?matrix(rnorm(80,?2),?8,?10)?#產生一個8行10列共80個平均值是2的矩陣
mat?=?rbind(mat,?matrix(rnorm(40,?-2),?4,?10))????#產生一個4行10列共40個平均值是-2的矩陣并與8行10列的矩陣合并成一個12行10列的矩陣
rownames(mat)?=?letters[1:12]????#行名為a-l
colnames(mat)?=?letters[1:10]????#列名為a-j

library(ComplexHeatmap)
require(circlize)????#加載circlize包,準備為熱圖設定需要的顏色參數

2)簡單熱圖

我們總是對圖形帶給我們的直觀感受贊不絕口。那么我們就先來看看單個熱圖的設計圖形是什么樣子的吧。

單個熱圖由熱圖主體和熱圖組件組成。 熱圖主體可以按行和列分割。 熱圖組件是標題,樹形圖,矩陣名稱和熱圖注釋,它們放在heamap體的四個側面上。

熱圖列表是熱圖和熱圖注釋列表的串聯,圍繞熱圖列表,有全局的標題和圖例。熱圖列表的一個重要內容是所有熱圖和注釋的行(如果熱圖列表是水平的,則是行注釋)都被調整,以便所有熱圖和注釋中的相同行對應于相同的特征。行注釋的熱圖列表:

如果是列注釋的話,熱圖列表則是:

Heatmap(mat,?col?=?colorRamp2(c(-3,?0,?3),?c(“green”,?“white”,?“red”)),
name?=?“single?heatmap”,
column_title?=?“good?column”,column_title_side?=?“top”,column_title_gp?=?gpar(fontsize?=?20,?fontface?=?“bold”,col=”red”),column_title_rot?=?0,cluster_columns?=?T,clustering_distance_columns?=”euclidean”,clustering_method_columns?=?“complete”,column_dend_side?=”top”,column_dend_height?=?unit(10,?“mm”),show_column_dend?=TRUE,column_dend_gp?=?gpar(),row_title?=?“luck?row”)

由此,我們可以很方便地更改圖上的熱圖主體和熱圖組件的屬性。

3)關于熱圖的顏色及拆分

a.顏色設置

color?<-?colorRamp2(c(-2,?0,?2),?c(“blue”,?“white”,?“red”))????#分別對應blue,white,red三種顏色,但當值是大于2或者小于-2時,則也是對應臨界點的blue和red
#使用調色板
color?<-colorRamp2(c(-2,?0,?2),?brewer.pal(n=3,?name=”RdBu”))
#隨機取色
color<-structure(circlize::rand_color(6),?names?=?c(1:6))???????
#漸變色
color?<-?colorRampPalette(c(“blue”,?“red”))(6)???????
color?<-?rainbow(6)?#彩虹色
#還可以用如下方式設置顏色
color?<-?heat.colors(6)
color?<-?terrain.colors(6)
color?<-?topo.colors(6)
color?<-?cm.colors(6)b.拆分

Heatmap(mat,?km?=?2)

Heatmap(mat,?split?=?rep(c(“A”,?“B”),?6))
Heatmap(mat,?split?=?data.frame(rep(c(“A”,?“B”),?6),?rep(c(“C”,?“D”),?each?=?6)))
Heatmap(mat,?split?=?data.frame(rep(c(“A”,?“B”),?6),?rep(c(“C”,?“D”),?each?=?6)),?combined_name_fun?=?function(x)?paste(x,?collapse?=?“\n”))

4)熱圖的簡單注釋

利用HeatmapAnnotation()對行或列注釋。HeatmapAnnotation()函數會生成一個注釋用的list。改函數的主要格式是HeatmapAnnotation(df, name, col, show_legend)。

annotation?=?data.frame(value?=?rnorm(10))
value?=?1:10
ha?=?HeatmapAnnotation(df?=?annotation,?points?=?anno_points(value),
annotation_height?=?c(1,?2))
Heatmap(mat,?top_annotation?=?ha,?top_annotation_height?=?unit(2,?“cm”),?
bottom_annotation?=?ha)

5)熱圖助力可視化腫瘤外顯子高頻突變基因的突變類型分布展示


如果有任何問題,歡迎點擊下方按鈕咨詢我們。

最近文章
网络棋牌看牌器 奇人码王高手论坛一六 重庆时时五星彩开奖 四川时时官网下载手机版 体彩七位数 湖北今天快三推荐 安徽时时快3开奖结果 查看历年开奖记录 ag真人真钱 时时彩龙虎和400期走势 超智能足球2 快乐十二分钟开奖四川走图 极速时时彩怎么看走势 十三水qq游戏叫什么 重庆时时彩老版app 冰球子 北京时时11选5