提取heatmap作圖中的cluster行名或者列名

此post旨在提取heatmap作圖中的cluster行名或者列名

其實(shí),對(duì)heatmap熱圖提取cluster就是對(duì)hclust的結(jié)果提取cluster,tree_col和tree_row屬性

首先,我們要構(gòu)建一個(gè)matrix或者data.frame進(jìn)行pheatmap作圖

# package library
library(pheatmap)
library(tidyverse)

# Create random data
set.seed(50)
data <- replicate(20, rnorm(50, mean = 100, sd = 100))
data %>% class()

rownames(data) <- paste("Gene", c(1:nrow(data)))
colnames(data) <- paste("Sample", c(1:ncol(data)))

# get heatmap plot
(out <- pheatmap(data, scale="row"))
dev.copy(png, "heatmap_raw.png", width=4000, height=4000, res = 330)
dev.off()

[圖片上傳失敗...(image-52c3bd-1651998762319)]

隨后,我們提取熱圖中的行名和列名

# Re-order original data (genes) to match ordering in heatmap (top-to-bottom)
data[out$tree_row[["order"]],] %>% rownames()

# Re-order original data (samples) to match ordering in heatmap (left-to-right)
data[out$tree_row[["order"]],] %>% colnames()

# get hclust plot
plot(out$tree_col)
abline(h = 11.5, col="red", lty=2, lwd=2)
dev.copy(png, "heatmap_hclust.png", width=4000, height=4000, res = 330)
dev.off()

[圖片上傳失敗...(image-3b19fa-1651998649328)]

假如我們需要可視化的話,可以加一個(gè)annotation

# get 3 cluster for sample name
(tree <- cutree(out$tree_col, k=3))

tree <- ifelse(tree == 1, "cluster_1", 
               ifelse(tree == 2, "cluster_2", 
                      "cluster_3")) %>% as.data.frame() %>% setNames("Cluster")

# get annotation plot
pheatmap(data, scale = "row", annotation_col = tree)
dev.copy(png, "heatmap_3cluster.png", width=4000, height=4000, res = 330)
dev.off()

[圖片上傳失敗...(image-837391-1651998607583)]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容