Как изменить метки дендрограммы в r

У меня есть дендрограмма на R. Она основана на иерархической кластеризации с использованием hclust. Я раскрашиваю разные метки в разные цвета, но когда я пытаюсь изменить метки своей дедрограммы (на строки фрейма данных, на которых основан кластер), используя dendrogram = dendrogram %>% set("labels", dataframe$column), метки заменяются, но в неправильных позициях. В качестве примера:

Моя дендрограмма выглядит так:

 ___|___
|      _|_
|     |   | 
|     1   0
2

когда я сейчас пытаюсь изменить метки, как указано выше, метки меняются, но они применяются слева направо в их порядке во фрейме данных. Если предположить, что мой исходный фрейм данных выглядит так

df:
   Column1  Column2
0     1        A
1     2        B
2     3        C

я хочу вот что:

    ___|___
   |      _|_
   |     |   | 
   |     B   A
   C

Но на самом деле я получаю:

    ___|___
   |      _|_
   |     |   | 
   |     B   C
   A   

Кластеризация данных и их преобразование в дендрограмму производились следующим образом:

> d <- stringdistmatrix(df$Column1, df$Column1)
> cl <- hclust(as.dist(d))
> dend = as.dendrogram(cl)

Может ли кто-нибудь сказать мне, как я могу пометить свою дендрограмму значениями другого столбца на основе индекса?


person sequence_hard    schedule 09.11.2015    source источник


Ответы (2)


В созданном вами hclust объекте, cl, у вас есть элемент с именем «порядок», который содержит порядок, в котором элементы находятся в дендрограмме.

Если вы хотите изменить метки, вам нужно разместить новые метки в том же порядке (cl$order), чтобы «новая» дендрограмма была правильной:

df$column2[cl$order]
person Cath    schedule 09.11.2015
comment
Кажется, работает. Я не могу сказать наверняка, так как теперь некоторые из моих меток отрезаны от дендрограммы (поскольку они являются «более длинными» строками), когда я использую plot (dend). Есть идеи, что я могу сделать, чтобы это исправить? Спасибо за Ваш ответ :-) - person sequence_hard; 09.11.2015
comment
@sequence_hard вы можете попробовать уменьшить cex или увеличить маржу (или немного того и другого ;-)) - person Cath; 09.11.2015

Пакет dendextend позволяет напрямую обновлять дендрограммы (а также hclust), используя следующее:

x <- c(1:5)
dend <- as.dendrogram(hclust(dist(x)))

if(!require(dendextend)) install.packages("dendextend")
library("dendextend")

labels(dend)
labels(dend) <- c(21:25)
labels(dend)
person Tal Galili    schedule 10.11.2015
comment
Я боролся с этим. Когда я пытаюсь назначить строковые метки (из столбца в df), похоже, это не работает. Warning message: In `labels<-.dendrogram`(`*tmp*`, value = list(name = c(4L, 9L, : The lengths of the new labels is shorter than the number of leaves in the dendrogram - labels are recycled. - person Evan Zamir; 20.05.2018
comment
Можете ли вы предоставить пример данных и кода, которые воспроизводят эту проблему? - person Tal Galili; 20.05.2018