這篇文章主要介紹“怎么使用ComplexHeatmap繪制單個熱圖”,在日常操作中,相信很多人在怎么使用ComplexHeatmap繪制單個熱圖問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么使用ComplexHeatmap繪制單個熱圖”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
ComplexHeatmap可以繪制很復雜的熱圖,能滿足日常以及文章所需,本次先簡單的介紹單個熱圖繪制的內容。
單個熱圖由熱圖主體和熱圖組件組成。其中主體可分為行和列;組件可以是標題、樹狀圖、矩陣名稱和熱圖注釋,在主圖的四周均可,且順序可調整。
#if (!requireNamespace("BiocManager", quietly = TRUE)) # install.packages("BiocManager") #BiocManager::install("ComplexHeatmap") library(ComplexHeatmap)
為更貼近生信使用場景,直接使用內置的基因表達數據
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))])
Heatmap(mat)
可以看到有很多需要“美化”的地方,別急,一點點來。
可以使用circle::colorRamp2()函數來生成Heatmap()中的顏色映射函數,輸入參數為分割位置以及分割點上的顏色。下例中,大于12的值都映射為紅色,小于12的值映射為綠色;
library(circlize)</code><code>#c中的范圍要根據實際情況設置</code><code>col_fun = colorRamp2(c(8, 12, 16), c("green", "white", "red"))</code><code>Heatmap(mat, name = "mat", col = col_fun)
更改分類變量的顏色,需要把所有分類的數字均進行賦值。
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")
更多顏色修改請參考官方文檔,文末的參考資料的鏈接。
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
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")) #顏色,字體,大小
column_title_gp中的填充參數來設置標題的背景顏色
Heatmap(mat, name = "mat", column_title = "I am a column title", column_title_gp = gpar(fill = "red", col = "white", border = "blue"), )
聚類是熱圖可視化的關鍵組成部分,在ComplexHeatmap包中可以非常靈活的進行設置。
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"))
注意:聚類樹的高度 和 寬度有區別。
可選計算距離的方式包括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")
支持hclust()中的聚類方法。
Heatmap(mat, name = "mat", clustering_method_rows = "single")
根據聚類結果將聚類樹的枝設置不同的顏色
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"))
通過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碼),然后按照數值排序。
到此,關于“怎么使用ComplexHeatmap繪制單個熱圖”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。