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其它相關文章!
推薦閱讀:
- R語言ComplexHeatmap繪制復雜熱圖heatmap
- Python利用Seaborn繪制多標簽的混淆矩陣
- python實現層次聚類的方法
- 詳解 MySQL 執行計劃
- MySQL中sum函數使用的實例教程