请使用以下代码:
heatmap(data.matrix(signals),col=colors,breaks=breaks,scale="none",Colv=NA,labRow=NA)
如何提取,预先计算或重新计算生成的热图中行的顺序?有没有办法将hclust(dist(signals))
的输出注入热图功能?
答案 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
哪个应该禁止行重新排序,然后传入已经按照你想要的顺序排列的矩阵。但您也可以通过Rowv
和hclustfun
等手动提供聚类功能或树形图...
答案 2 :(得分:2)
我同意杰西的观点。对于您的问题,请查看热图功能的Rowv
,distfun
和hclustfun
参数。
要获得更多选择,heatmap.2
包中的gplots
,heatmap_plus
包中的Heatplus
和pheatmap
包中的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
给出:
默认的热图函数使用一个额外的步骤,但是,通过参数 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
相同的输出:
在这个例子中,列恰好没有重新排序,但行确实如此。最后,要简单地检索订单,您可以将热图分配给变量并获取输出。
heatmap(m)
答案 4 :(得分:1)
pheatmap将允许您指定它用于进行聚类的方法,接受与hclust相同的参数。