9

采取以下代码:

 heatmap(data.matrix(signals),col=colors,breaks=breaks,scale="none",Colv=NA,labRow=NA)

如何提取、预计算或重新计算生成的热图中行的顺序?有没有办法将输出注入hclust(dist(signals))到热图函数中?

4

5 回答 5

15

感谢您的反馈,杰西和保罗。我编写了以下排序函数,希望对其他人有用:

data        = data.matrix(data)
distance    = dist(data)
cluster     = hclust(distance, method="ward")
dendrogram  = as.dendrogram(cluster)
Rowv        = rowMeans(data, na.rm = T)
dendrogram  = reorder(dendrogram, Rowv)

## Produce the heatmap from the calculated dendrogram.
## Don't allow it to re-order rows because we have already re-ordered them above.

reorderfun = function(d,w) { d }
png("heatmap.png", res=150, height=22,width=17,units="in")

heatmap(data,col=colors,breaks=breaks,scale="none",Colv=NA,Rowv=dendrogram,labRow=NA, reorderfun=reorderfun)

dev.off()


## Re-order the original data using the computed dendrogram
rowInd = rev(order.dendrogram(dendrogram))
di = dim(data)
nc = di[2L]
nr = di[1L]
colInd = 1L:nc
data_ordered <- data[rowInd, colInd]
write.table(data_ordered, "rows.txt",quote=F, sep="\t",row.names=T, col.names=T)
于 2011-03-16T17:56:02.643 回答
6

有多种选择。如果您运行?heatmap,您会看到可以调整的各种参数。也许最简单的方法是设置Rowv=NA应该抑制行重新排序,然后传入矩阵,其中行已经按照您想要的顺序。但您也可以手动提供聚类功能,或树状图,通过Rowvhclustfun...

于 2011-03-16T03:54:42.143 回答
4

我相信这篇文章可能有用:

默认情况下,R 热图如何对行进行排序?

以下面的矩阵为例:

set.seed(321)
m = matrix(nrow=7, ncol = 7, rnorm(49))
> m
           [,1]       [,2]       [,3]        [,4]       [,5]        [,6]      [,7]
[1,]  1.7049032  0.2331354 -1.1534395 -0.10706154 -1.1203274  0.11453945 0.2503958
[2,] -0.7120386  0.3391139 -0.8046717  0.98833540 -0.4746847 -2.22626331 0.2440872
[3,] -0.2779849 -0.5519147  0.4560691 -1.07223880 -1.5304122  1.63579034 0.7997382
[4,] -0.1196490  0.3477014  0.4203326 -0.75801528  0.4157148 -0.15932072 0.3414096
[5,] -0.1239606  1.4845918  0.5775845  0.09500072  0.6341979  0.02826746 0.2587177
[6,]  0.2681838  0.1883255  0.4463561 -2.33093117  1.2308474 -1.53665329 0.9538786
[7,]  0.7268415  2.4432598  0.9172555  0.41751598 -0.1545637  0.07815779 1.1364147

Rowv您可以使用参数和覆盖行和列的顺序Colv。您可以使用这些作为树状图覆盖顺序。例如,您可以使用函数计算订单hclust,然后将其heatmap作为树状图传递给:

 rhcr <- hclust(dist(m))
 chrc <- hclust(dist(t(m)))
 heatmap(m,Rowv = as.dendrogram(rhcr),
           Colv = as.dendrogram(rhcr))

 > rhcr$order
 [1] 1 3 6 2 7 4 5
 > chrc$order
 [1] 6 4 5 1 2 3 7

给出:

Hclust 热图

然而,默认的热图函数使用一个额外的步骤,通过参数reorderfun = function(d, w) reorder(d, w),它根据行/列均值尽可能地重新排序树状图。您可以使用此附加步骤重现默认顺序。因此,要获得与 相同的顺序heatmap,您可以执行以下操作:

rddr <- reorder(as.dendrogram(rhcr),rowMeans(m))
cddr <- reorder(as.dendrogram(chcr),colMeans(m))

> as.hclust(rddr)$order
[1] 3 1 6 2 4 5 7
> as.hclust(cddr)$order
[1] 6 4 5 1 2 3 7

这给出了与简单相同的输出heatmap(m)

默认热图

在这个例子中,列碰巧没有被重新排序,但行却被重新排序。最后,为了简单地检索订单,您可以将热图分配给一个变量并获取输出。

> p <- heatmap(m)
> p$rowInd
[1] 3 1 6 2 4 5 7
> p$colInd
[1] 6 4 5 1 2 3 7
于 2017-10-24T16:03:21.060 回答
2

我同意杰西的观点。对于您的问题,请查看 heatmap 函数的Rowvdistfunhclustfun参数。对于更多的选择,包中、包中和包中的heatmap.2功能gplots可能heatmap_plus会有Heatplus一些pheatmap用处pheatmap

于 2011-03-16T09:09:35.647 回答
1

pheatmap 将允许您指定它用于进行聚类的方法,接受与 hclust 相同的参数。

于 2011-08-15T18:31:01.640 回答