2017-08-15 2 views
0

I généré une carte thermique en utilisant heatmap.2 du paquet gplots:R - heatmap.2: des rangées et des colonnes de réapprovisionnement

library(gplots) 
abc <-read.csv(file="abc.txt", header=T, sep="\t", dec=".") 
abcm<-as.matrix(abc) 
def <-read.csv(file="def.txt", header=T, sep="\t", dec=".") 
defm<-as.matrix(def) 
mean <-read.csv(file="mean.txt", header=T, sep="\t", dec=".") 
meanm<-as.matrix(mean) 
distance.row = dist(as.matrix(def), method = "euclidean") 
cluster.row = hclust(distance.row, method = "average") 
distance.col = dist(t(as.matrix(abc)), method = "euclidean") 
cluster.col = hclust(distance.col, method = "average") 
my_palette <- colorRampPalette(c("red", "yellow", "green"))(n = 299) 

heatmap.2(meanm, trace="none", dendrogram="both", Rowv=as.dendrogram(cluster.row), Colv=as.dendrogram(cluster.col), margins = c(7,7), col=my_palette) 

avec deux méthodes de classification différentes pour chaque dendrogramme.

heatmap

Maintenant, je veux réorganiser les objets, de sorte que les carrés verts forment une diagonale. Comment je fais ça?

EDIT: mon entrée exemple ici

structure(c(1, 0.6798, 0.6604, 0.7101, 0.6771, 0.6725, 0.6696, 
0.6548, 0.676, 0.6811, 0.6798, 1, 0.656, 0.6763, 0.8163, 0.781, 
0.7811, 0.6503, 0.7811, 0.855, 0.6604, 0.656, 1, 0.6532, 0.6498, 
0.6459, 0.6455, 0.7532, 0.6521, 0.6536, 0.7101, 0.6763, 0.6532, 
1, 0.672, 0.669, 0.6669, 0.6517, 0.6748, 0.6786, 0.6771, 0.8163, 
0.6498, 0.672, 1, 0.7828, 0.7838, 0.6441, 0.7736, 0.8227, 0.6725, 
0.781, 0.6459, 0.669, 0.7828, 1, 0.8361, 0.6447, 0.7574, 0.7796, 
0.6696, 0.7811, 0.6455, 0.6669, 0.7838, 0.8361, 1, 0.638, 0.7566, 
0.7772, 0.6548, 0.6503, 0.7532, 0.6517, 0.6441, 0.6447, 0.638, 
1, 0.6563, 0.6459, 0.676, 0.7811, 0.6521, 0.6748, 0.7736, 0.7574, 
0.7566, 0.6563, 1, 0.7778, 0.6811, 0.855, 0.6536, 0.6786, 0.8227, 
0.7796, 0.7772, 0.6459, 0.7778, 1), .Dim = c(10L, 10L), .Dimnames = list(
    c("sp1", "sp2", "sp3", "sp4", "sp5", "sp6", "sp7", "sp8", 
    "sp9", "sp10"), c("sp1", "sp2", "sp3", "sp4", "sp5", "sp6", 
    "sp7", "sp8", "sp9", "sp10"))) 
+0

Pouvez-vous inclure des données d'échantillons? Le plus simple est d'utiliser 'dput()' avec un sous-ensemble de vos données. –

+0

@LukeC voir mes modifications! – rororo

+0

Merci @ rororo- Je pense que pour être complet, vous devez inclure 'cluster.row' et' cluster.col' afin que les utilisateurs puissent réellement tracer le heatmap comme vous l'avez fait. Cependant, je pourrais mal vous comprendre - vous voulez réorganiser vos lignes et colonnes de sorte que vous obtenez une diagonale. Cela ne casserait-il pas votre dendrogramme? Pour sp 4, 1, 8 et 3, ce n'est pas nécessairement important (il suffit de retourner cette branche) mais pour sp 9, 6 et 7, je ne vois pas de configuration de dendrogramme qui permettrait la diagonale. Voir les arguments 'Rowv' et' Colv' pour 'heatmap.2' pour plus d'informations. Si je ne vous comprends pas, je m'excuse! –

Répondre

1

La fonction reorder.dendrogram retourne les branches.

reorder(as.dendrogram(cluster.col), 10:1) 
reorder(as.dendrogram(cluster.row), 10:1) 

utilisé dans

heatmap.2(meanm, trace="none", dendrogram="both", 
Rowv=reorder(as.dendrogram(cluster.row), 10:1), 
Colv=reorder(as.dendrogram(cluster.col), 10:1), 
margins = c(7,7), breaks=breaks,col=hm.colors, na.color="white", 
main="mean(AAI+ANI)", xlab="AAI clustering", ylab="ANI clustering", srtCol=45)