Порядок рядов в тепловой карте?
-
24-10-2019 - |
Вопрос
Возьмите следующий код:
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
Дает:
Тем не менее, функция тепловой карты по умолчанию использует один дополнительный шаг через параметр 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.