前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pheatmap 排序

pheatmap 排序

原创
作者头像
花落花相惜
发布2021-12-06 13:05:41
1.3K0
发布2021-12-06 13:05:41
举报
文章被收录于专栏:花落的技术专栏

解析 hclust

hclust 的顺序是靠order 和 labels 两个数据控制,labels 是有顺序的名称,其座次可以被索引提取。order

则相当于索引,从labels 的相应座次选取并调整hclut的名称。

代码语言:txt
复制
library(pheatmap)
代码语言:txt
复制
set.seed(13)
代码语言:txt
复制
test = matrix(rnorm(200), ncol = 10, nrow = 20,
代码语言:txt
复制
              dimnames = list(
代码语言:txt
复制
                row_names = paste0("Geno", 1:20),
代码语言:txt
复制
                col_names = paste0("Test", 1:10)
代码语言:txt
复制
              ))
代码语言:txt
复制
# heatmap
代码语言:txt
复制
pheatmap(test)
代码语言:txt
复制
# dist mat
代码语言:txt
复制
mat <- dist(test)
代码语言:txt
复制
hclust_mat <- hclust(mat)
代码语言:txt
复制
hclust_mat$order
代码语言:txt
复制
hclust_mat$labels
  1. hclust_mat$orderundefined1 11 14 16 8 17 5 20 12 1 6 9 7 10 18 3 2 19 4 13 15
  2. hclust_mat$labelsundefined1 "Geno1" "Geno2" "Geno3" "Geno4" "Geno5" "Geno6"undefined7 "Geno7" "Geno8" "Geno9" "Geno10" "Geno11" "Geno12"undefined13 "Geno13" "Geno14" "Geno15" "Geno16" "Geno17" "Geno18"undefined19 "Geno19" "Geno20"

强制重排序

因此,可以直接用order去强制控制hclust的顺序,从而控制热图的顺序,但这样热图的聚类树状图会非常混乱。

代码语言:txt
复制
# reorder row_clust
代码语言:txt
复制
index <- seq(1,20, by = 1)
代码语言:txt
复制
hclust_mat$order <- index
代码语言:txt
复制
pheatmap(test, cluster_rows = hclust_mat)

reorder 函数

reorder.dendrogram

{stats}可以通过一个值向量实现聚类树次序重排,从而控制pheatmap的顺序,这样做的好处是实现了局域型排序,即同聚类水平的数据按照给定index排序,避免了聚类树乱序。

代码语言:txt
复制
require(gridExtra)
代码语言:txt
复制
# reorder 1 
代码语言:txt
复制
index <- order(rowSums(test), decreasing = TRUE)
代码语言:txt
复制
dend = reorder(as.dendrogram(hclust_mat), 
代码语言:txt
复制
               wts = index)
代码语言:txt
复制
row_cluster <- as.hclust(dend)
代码语言:txt
复制
p1 <- pheatmap(test, cluster_rows = row_cluster, 
代码语言:txt
复制
         show_colnames = FALSE)
代码语言:txt
复制
# reorder 2
代码语言:txt
复制
index <- order(rowSums(test), decreasing = FALSE)
代码语言:txt
复制
dend = reorder(as.dendrogram(hclust_mat), 
代码语言:txt
复制
               wts = index)
代码语言:txt
复制
row_cluster <- as.hclust(dend)
代码语言:txt
复制
p2 <- pheatmap(test, cluster_rows = row_cluster, 
代码语言:txt
复制
         show_colnames = FALSE)
代码语言:txt
复制
# extract plot list
代码语言:txt
复制
plot_list <- list(p1[[4]], p2[[4]])
代码语言:txt
复制
grid.arrange(arrangeGrob(grobs= plot_list,ncol=2))

由此可见,通过reorder 函数中的wts(权重)来控制热图坐标顺序是有效且清晰的。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 解析 hclust
  • 强制重排序
  • reorder 函数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档