R - тепловая карта 2: переупорядочить строки и столбцы

Я создал тепловую карту, используя тепловую карту.2 пакета gplots:

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)

с двумя разными методами кластеризации для каждой дендрограммы.

тепловая карта

Теперь я хочу переупорядочить объекты так, чтобы зеленые квадраты образовывали диагональ. Как мне это сделать?

РЕДАКТИРОВАТЬ: мой образец ввода здесь

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")))

person rororo    schedule 15.08.2017    source источник
comment
Можете ли вы включить образцы данных? Самым простым может быть использование dput() с подмножеством ваших данных.   -  person Luke C    schedule 16.08.2017
comment
@LukeC, посмотри мои правки!   -  person rororo    schedule 16.08.2017
comment
Спасибо @ rororo. Думаю, для полноты картины вам нужно включить cluster.row и cluster.col, чтобы пользователи могли построить тепловую карту, как это сделали вы. Однако я могу вас неправильно понять - вы хотите переупорядочить свои строки и столбцы, чтобы получить диагональ. Разве это не сломает вашу дендрограмму? Для sp 4, 1, 8 и 3 это не обязательно будет иметь значение (просто переверните эту ветку), но для sp 9, 6 и 7 я не вижу конфигурации дендрограммы, которая допускала бы диагональ. См. Аргументы Rowv и Colv для heatmap.2 для получения дополнительной информации. Если я вас не понимаю, прошу прощения!   -  person Luke C    schedule 16.08.2017
comment
о, я совершенно не заметил этого! sp9 кластеризуется по-другому: / но все же, как мне перевернуть ветви, чтобы хотя бы большинство элементов выровнялись?   -  person rororo    schedule 16.08.2017
comment
Может быть, попробуйте reorder.dendrogram- посмотрите пример в справке для этой функции, похоже, он может сделать то, что вам нужно.   -  person Luke C    schedule 18.08.2017
comment
спасибо за подсказку! добавление произвольных значений 10: 1 делает его намного лучше. Однако документация по этому параметру довольно расплывчата ... Если вы ответите на мой вопрос официально, я буду счастлив!   -  person rororo    schedule 20.08.2017
comment
Спасибо, но я думаю, тебе стоит ответить! Я понятия не имею, как вы на самом деле разобрались с этим, и я думаю, что полный ответ, показывающий решение, которым вы довольны, вероятно, был бы наиболее полезным для всех, у кого есть аналогичный вопрос в будущем. Ваше здоровье!   -  person Luke C    schedule 21.08.2017


Ответы (1)


Функция reorder.dendrogram переворачивает ветви.

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

используется в

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)
person rororo    schedule 22.08.2017