热图中的行顺序?

时间:2011-03-16 03:42:42

标签: r cluster-analysis heatmap

请使用以下代码:

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

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

5 个答案:

答案 0 :(得分:12)

感谢Jesse和Paolo的反馈。我写了下面的排序函数,希望对其他人有用:

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)

答案 1 :(得分:4)

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

答案 2 :(得分:2)

我同意杰西的观点。对于您的问题,请查看热图功能的Rowvdistfunhclustfun参数。 要获得更多选择,heatmap.2包中的gplotsheatmap_plus包中的Heatpluspheatmap包中的pheatmap中的函数可能属于某些选项使用

答案 3 :(得分:2)

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

How does R heatmap order rows by default?

以下面的矩阵为例:

Cannot close stream until all bytes are written.

您可以使用参数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

给出:

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 ,它会根据行/列的平均值重新排序树形图。您可以使用此附加步骤重现默认顺序。因此,要获得与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 相同的输出:

Default heatmap

在这个例子中,列恰好没有重新排序,但行确实如此。最后,要简单地检索订单,您可以将热图分配给变量并获取输出。

heatmap(m)

答案 4 :(得分:1)

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