Вопрос

Возьмите следующий код:

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

Как я могу извлечь, предварительно разгадывать или перечислять порядок строк в образованной тепловой карте? Есть ли способ ввести выход hclust(dist(signals)) в функцию тепловой карты?

Это было полезно?

Решение

Спасибо за отзыв, Джесси и Паоло. Я написал следующую функцию заказа, которая, надеюсь, будет полезна для других:

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)

Другие советы

Есть множество вариантов. Если вы бежите ?heatmap Вы увидите различные параметры, которые вы можете настроить. Может быть, самый простой - установить Rowv=NA что должно подавлять переупорядочение ряда, а затем пройти в матрицу с рядами, уже в желании, который вы хотите. Но вы также можете вручную предоставить функцию кластеризации или дендрограммы, через Rowv а также hclustfun так далее...

Я согласен с Джесси. Для вашей проблемы взгляните на Rowv, distfun а также hclustfunАргументы функции тепловой карты. Для большего выбора функций heatmap.2 в gplots упаковка, heatmap_plus в Heatplus упаковка и pheatmap в pheatmap Пакет может быть полезен.

Я считаю, что этот пост может быть полезен:

Как REAPMAP ROWS по умолчанию?

Возьмите следующую матрицу, например:

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

Дает:

Hclust Heatmap

Тем не менее, функция тепловой карты по умолчанию использует один дополнительный шаг через параметр 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):

Тепловая карта по умолчанию

В этом примере столбцы не переупорядочивались, но строки делают. Наконец, чтобы просто получить заказ, вы можете назначить тепловую карту переменной и получить выход.

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

PheatMap позволит вам указать метод, который он использует для кластеризации, принимая те же аргументы, что и Hclust.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top