creo que este post podría ser útil:
How does R heatmap order rows by default?
Tome la siguiente matriz, por ejemplo:
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
puede invalidar el orden de las filas y columnas con los parámetros Rowv
y Colv
. Puede anular el orden con estos como dendrogramas. Por ejemplo, se puede calcular un pedido utilizando la función hclust
, a continuación, pasar eso a heatmap
como un dendrograma:
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
Da:
Hclust heatmap
La función de mapa de calor por defecto utiliza un paso adicional, sin embargo , a través del parámetro reorderfun = function(d, w) reorder(d, w)
, que reordena el dendrograma tanto como sea posible en base a la media de fila/columna. puede reproducir el orden predeterminado con este paso adicional. Así que para obtener el mismo orden como heatmap
, que puede hacer:
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
que da el mismo resultado que simplemente heatmap(m)
:
Default heatmap
En este ejemplo, las columnas suceden para no ser reordenado, pero las filas lo hacen. Finalmente, para recuperar el orden, puede asignar el mapa de calor a una variable y obtener el resultado.
> p <- heatmap(m)
> p$rowInd
[1] 3 1 6 2 4 5 7
> p$colInd
[1] 6 4 5 1 2 3 7
pregunta relacionada: [? ¿Qué mapa de calor/imagen para obtener parcela en hilera-ordenados sin ningún dendrograma] (https://stackoverflow.com/questions/10562078/r-which-heatmap-image-to-get- row-sorted-plot-without-any-dendrogram) – smci