ComplexHeatmap繪制單個熱圖

前言

ComplexHeatmap可以繪制很復雜的熱圖,能滿足日常以及文章所需,本次先簡單的介紹單個熱圖繪制的內容。

單個熱圖由熱圖主體和熱圖組件組成。其中主體可分為行和列;組件可以是標題、樹狀圖、矩陣名稱和熱圖註釋,在主圖的四周均可,且順序可調整。

一 載入數據,R包

1.1 載入ComplexHeatmap包

#if (!requireNamespace("BiocManager", quietly = TRUE))
#    install.packages("BiocManager")
#BiocManager::install("ComplexHeatmap")
library(ComplexHeatmap)

1.2 載入數據

為更貼近生信使用場景,直接使用內置的基因表達數據

expr = readRDS(paste0(system.file(package = "ComplexHeatmap"), "/extdata/gene_expression.rds"))
#查看數據
str(expr)
expr[1:4,c(1:4,25:27)]

拿到一個新數據後,除瞭檢查[1:4,1:4]外,也許還需要看看最後幾列,另外還需要觀察列名稱的規律。

去除最後幾列,或者隻選取列名字包含cell的(TCGA數據處理中也會經常遇到)

mat = as.matrix(expr[, grep("cell", colnames(expr))])

1.3 繪制最簡單的熱圖

Heatmap(mat)

可以看到有很多需要“美化”的地方,別急,一點點來。

二 熱圖修飾

2.1 顏色

1)連續型變量

可以使用circle::colorRamp2()函數來生成Heatmap()中的顏色映射函數,輸入參數為分割位置以及分割點上的顏色。下例中,大於12的值都映射為紅色,小於12的值映射為綠色;

library(circlize)
#c中的范圍要根據實際情況設置
col_fun = colorRamp2(c(8, 12, 16), c("green", "white", "red"))
Heatmap(mat, name = "mat", col = col_fun)

2)分類型變量

更改分類變量的顏色,需要把所有分類的數字均進行賦值。

discrete_mat = matrix(sample(1:4, 100, replace = TRUE), 10, 10)
colors = structure(1:4, names = c("1", "2", "3", "4")) # black, red, green, blue
Heatmap(discrete_mat, name = "mat", col = colors,
    column_title = "a discrete numeric matrix")

更多顏色修改請參考官方文檔,文末的參考資料的鏈接。

2.2 標題

1)設置行,列和圖例的標題

Heatmap(mat, 
        name = "legend title", #圖例title
        column_title = "I am a column title", #列title 
        row_title = "I am a row title",
        column_title_side = "bottom") #行title

2)設置標題的位置,顏色,字體,大小

Heatmap(mat, name = "mat", 
        row_title = "row title",
        row_title_rot = 0, #旋轉方向
        column_title = "I am a big column title", 
        column_title_side = "bottom", #標題位置
        column_title_gp = gpar(fontsize = 20, fontface = "bold",col = "red")) #顏色,字體,大小

3)設置標題的背景

column_title_gp中的填充參數來設置標題的背景顏色

Heatmap(mat, name = "mat", 
        column_title = "I am a column title", 
        column_title_gp = gpar(fill = "red", col = "white", border = "blue"),
        )

2.3 聚類

聚類是熱圖可視化的關鍵組成部分,在ComplexHeatmap包中可以非常靈活的進行設置。

A:一般設置

cluster_rows/columns :是否進行聚類

show_column/row_dend :是否顯示聚類樹

column/row_dend_side :聚類圖繪制的位置

column_dend_height/row_dend_widht :聚類樹的高度 和 寬度

Heatmap(mat, name = "mat",</code><code>        cluster_columns = T,  </code><code>        cluster_rows = F, ## turn off row clustering</code><code>        show_column_dend = T, ## hide column dendrogram</code><code>        show_row_dend = F,</code><code>        column_dend_side = "top",  #dendrogram location</code><code>        column_dend_height = unit(4, "cm"))

註意:聚類樹的高度 和 寬度有區別。

B:距離方法

可選計算距離的方式包括pearson, spearman以及kendall , 或者計算距離的自定義函數。

Heatmap(mat, name = "mat", clustering_distance_rows = "pearson",
    column_title = "pre-defined distance method (1 - pearson)")

自定義

Heatmap(mat, name = "mat", clustering_distance_rows = function(x, y) 1 - cor(x, y),
    column_title = "a function that calculates pairwise distance")

C:聚類方法

支持hclust()中的聚類方法。

Heatmap(mat, name = "mat", clustering_method_rows = "single")

D:聚類樹的渲染

根據聚類結果將聚類樹的枝設置不同的顏色

library(dendextend)</code><code>row_dend = as.dendrogram(hclust(dist(mat)))</code><code>row_dend = color_branches(row_dend, k = 4) # `color_branches()` returns a dendrogram object</code><code>Heatmap(mat, name = "mat", </code><code>        cluster_rows = row_dend,</code><code>        row_dend_width  = unit(4, "cm"))

2.4 設置行列順序

通過row_order/column_order函數自定義其排序,為方便展示選擇前30個基因。

mat <- mat[1:30,]
Heatmap(mat, name = "mat", 
          row_order = order(as.numeric(gsub("gene", "", rownames(mat)))), #將gene1替換為1,在排序
          column_order = sort(colnames(mat)),
          column_title = "reorder matrix")

註:此處將gene1,gene10 先替換掉gene(不去的話是按照ASCII碼),然後按照數值排序。

參考資料:

https://github.com/jokergoo/ComplexHeatmap

https://jokergoo.github.io/ComplexHeatmap-reference/book/a-single-heatmap.html

以上就是ComplexHeatmap繪制單個熱圖的詳細內容,更多關於ComplexHeatmap繪制單個熱圖的資料請關註WalkonNet其它相關文章!

推薦閱讀: