hclust 的顺序是靠order 和 labels 两个数据控制,labels 是有顺序的名称,其座次可以被索引提取。order
则相当于索引,从labels 的相应座次选取并调整hclut的名称。
library(pheatmap)
set.seed(13)
test = matrix(rnorm(200), ncol = 10, nrow = 20,
dimnames = list(
row_names = paste0("Geno", 1:20),
col_names = paste0("Test", 1:10)
))
# heatmap
pheatmap(test)
# dist mat
mat <- dist(test)
hclust_mat <- hclust(mat)
hclust_mat$order
hclust_mat$labels
因此,可以直接用order去强制控制hclust的顺序,从而控制热图的顺序,但这样热图的聚类树状图会非常混乱。
# reorder row_clust
index <- seq(1,20, by = 1)
hclust_mat$order <- index
pheatmap(test, cluster_rows = hclust_mat)
reorder.dendrogram
{stats}可以通过一个值向量实现聚类树次序重排,从而控制pheatmap的顺序,这样做的好处是实现了局域型排序,即同聚类水平的数据按照给定index排序,避免了聚类树乱序。
require(gridExtra)
# reorder 1
index <- order(rowSums(test), decreasing = TRUE)
dend = reorder(as.dendrogram(hclust_mat),
wts = index)
row_cluster <- as.hclust(dend)
p1 <- pheatmap(test, cluster_rows = row_cluster,
show_colnames = FALSE)
# reorder 2
index <- order(rowSums(test), decreasing = FALSE)
dend = reorder(as.dendrogram(hclust_mat),
wts = index)
row_cluster <- as.hclust(dend)
p2 <- pheatmap(test, cluster_rows = row_cluster,
show_colnames = FALSE)
# extract plot list
plot_list <- list(p1[[4]], p2[[4]])
grid.arrange(arrangeGrob(grobs= plot_list,ncol=2))
由此可见,通过reorder 函数中的wts(权重)来控制热图坐标顺序是有效且清晰的。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。