2011-03-16 21 views
5

Aşağıdaki kodu alın:Isı haritası içindeki satırların sırası?

 heatmap(data.matrix(signals),col=colors,breaks=breaks,scale="none",Colv=NA,labRow=NA) 
Üretilen sıcaklık haritasındaki satırların sırasını nasıl alabilir, önceden hesaplayabilir veya yeniden hesaplayabilirim? Xmax8'in çıktısını ısı haritası işlevine enjekte etmenin bir yolu var mı?

+0

İlgili soru: [? Herhangi dendrogramın olmadan satır sıralanmış arsa almak için hangi ısı haritası/resim] (https://stackoverflow.com/questions/10562078/r-which-heatmap-image-to-get- satır-ayrılmış-arsa-olmadan-herhangi-dendrogram) – smci

cevap

12

Geri bildiriminiz için teşekkürler, Jesse ve 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) 
4

Çeşitli seçenekler vardır. ?heatmap'u çalıştırırsanız, değiştirebileceğiniz çeşitli parametreleri görürsünüz. Belki de en kolayı, satır sıralamayı bastıran Rowv=NA'u ayarlamaktır ve sonra matrisini satırları istediğiniz sıraya geçirir. Ama aynı zamanda, Rowv ve hclustfun aracılığıyla da clustering işlevini veya dendrogramları manuel olarak sağlayabilirsiniz ...

2

Jesse'ye katılıyorum. Sorunuz için, ısı haritası işlevinin Rowv, distfun ve hclustfun argümanlarına bir göz atın. Daha fazla seçenek için gplots paketindeki heatmap.2 numaralı heatmap_plus ve paketindeki pheatmap paketindeki pheatmap paketinin bazı kullanımları olabilir.

1

pheatmap bunu hclust aynı argümanları kabul ederek kümeleme yapmak için kullandığı yöntemi belirtmek için izin verir: Umarım başkalarına yararlı olabilecek aşağıdaki sipariş işlevi yazdı.

2

Bu yazı yararlı olabilir inanıyoruz:

How does R heatmap order rows by default?

örneğin aşağıdaki matrisi atın:

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 

Sen parametreleri Rowv ile satır ve sütun sırasını geçersiz kılabilir Colv. Siparişi dendrogram olarak geçersiz kılabilirsiniz. Örneğin, işlevini hclust kullanarak sipariş hesaplayabilir, daha sonra bir dendrogramın olarak heatmap o geçmesi:

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 

verir:

Hclust heatmap

varsayılan ısı haritası işlevi ek bir adım kullanır, ancak dendrogramı satır/sütun ortalamasının mümkün olan en fazla bazını yeniden düzenleyen reorderfun = function(d, w) reorder(d, w) parametresi aracılığıyla. Bu ek adımla varsayılan siparişi yeniden oluşturabilirsiniz. Yani heatmap aynı sıralamayı elde etmek için, bunu yapabilirsiniz:

olarak basitçe heatmap(m) aynı çıktıyı verir
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

sütunları yeniden alamadım başına Bu örnekte, ancak satırlar yapar. Son olarak, siparişi kolayca almak için ısı haritasını bir değişkene atayabilir ve çıktı alabilirsiniz.

> p <- heatmap(m) 
> p$rowInd 
[1] 3 1 6 2 4 5 7 
> p$colInd 
[1] 6 4 5 1 2 3 7