用R绘制带有聚类的热图,但隐藏树状图。

11

默认情况下,R的heatmap将对行和列进行聚类:

mtscaled = as.matrix(scale(mtcars))
heatmap(mtscaled, scale='none')

enter image description here

我可以禁用聚类:

heatmap(mtscaled, Colv=NA, Rowv=NA, scale='none')

然后树状图消失了:enter image description here

但是现在数据不再被聚类。

我不想显示树状图,但仍然希望对行和/或列进行聚类。我该怎么办?

我想要的示例:enter image description here


如果以下内容解决了您的问题,请帮忙将其标记为推荐答案并关闭。 - Prasanna Nandakumar
6个回答

14

您可以使用pheatmap来完成此操作:

mtscaled <- as.matrix(scale(mtcars))
pheatmap::pheatmap(mtscaled, treeheight_row = 0, treeheight_col = 0)

查看 pheatmap 输出结果:

pheatmap 输出结果


2
pheatmap默认进行聚类 (cluster_rows = TRUE, cluster_cols = TRUE)。 - Karel Fišer

10
library(gplots)
heatmap.2(mtscaled,dendrogram='none', Rowv=TRUE, Colv=TRUE,trace='none')

Rowv - 是TRUE,这意味着根据行均值计算和重新排列系统树。

Colv - 列应该与行被同等地处理。

enter image description here


gplots无法在R 3.5.2中加载,因为它无法加载依赖项caTools,也无法从CRAN存储库中获取该依赖项。 - Nathan

3

你可以依靠基本的R结构,考虑以下方法,通过自己构建hclust树来实现。

mtscaled = as.matrix(scale(mtcars))
row_order = hclust(dist(mtscaled))$order
column_order = hclust(dist(t(mtscaled)))$order
heatmap(mtscaled[row_order,column_order], Colv=NA, Rowv=NA, scale="none")

不需要安装额外的垃圾。


2
在ComplexHeatmap中,有一些函数参数可以用于删除树形图:
library(ComplexHeatmap)
Heatmap(as.matrix(iris[,1:4]), name = "mat", show_column_dend = FALSE, show_row_dend = FALSE)

1
我曾经遇到了与pheatmap相关的类似问题,它在可视化和热图方面要比heatmap或heatmap.2更好。虽然heatmap.2也是解决方案之一,但以下是使用pheatmap解决问题的方法,通过提取聚类数据的顺序来实现。
library(pheatmap)
mtscaled = as.matrix(scale(mtcars))
H = pheatmap(mtscaled)

这段文本的英译中文为:

这里是 pheatmap 的输出


pheatmap(mtscaled[H$tree_row$order,H$tree_col$order],cluster_rows = F,cluster_cols = F)

在提取聚类顺序后,这里是pheatmap的输出结果


0

使用基本的R热图函数两次绘制树状图。获取第一次运行的输出,该输出进行了聚类但必须绘制树状图,并将其再次输入到热图函数中。这一次,不进行聚类,也不绘制树状图。

#生成一个具有一定结构的随机对称矩阵,并制作热图

M100s<-matrix(runif(10000),nrow=100)
M100s[2,]<-runif(100,min=0.1,max=0.2)
M100s[4,]<-runif(100,min=0.1,max=0.2)
M100s[6,]<-runif(100,min=0.1,max=0.2)
M100s[99,]<-runif(100,min=0.1,max=0.2)
M100s[37,]<-runif(100,min=0.1,max=0.2)
M100s[lower.tri(M100s)] <- t(M100s)[lower.tri(M100s)]
heatmap(M100s)

#保存输出结果

OutputH <- heatmap(M100s)

#再次运行,不使用聚类或树状图

M100c <- M100s
M100c1 <- M100c[,OutputH$rowInd]
M100c2 <- M100c1[OutputH$colInd,]
heatmap(M100c2,Rowv = NA, Colv = NA, labRow = NA, labCol = NA)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接