Добавление строк таблицы к меткам дендрограммы

По сути, я пытаюсь изменить метки моей дендрограммы на соответствующую строку в таблице. Например, рассмотрим набор данных USArrest.

Прямо сейчас метки на дендрограмме — это просто названия штатов, «Алабама» и так далее. Но глядя на таблицу данных, строка для алабамы выглядит так

        Murder Assault UrbanPop Rape
Alabama   13.2     236       58 21.2

Поэтому вместо просто «Алабама» в качестве метки я хочу иметь эту полную строку: Alabama 13.2 236 58 21.2 и так далее для всех других меток дендрограммы.

Мой код выглядит так:

library("ggplot2")
library("ggdendro")
library(dendextend)
data(USArrests)

dend <- USArrests %>%  scale %>% 
dist %>% hclust %>% as.dendrogram
dend %>% plot
dend %>% set("labels_cex", 0.8) %>% # Change size
plot(main = "Dendrogram") # plot

Я попытался сократить дендрограмму до двух рангов, чтобы облегчить себе задачу. Допустим, я работаю с dend <- USArrests[1:2,] %>% scale %>%

Я пробовал что-то вроде этого:

alabama_label <- USArrests[1,]
alaska_label <- USArrests[2,]
dend %>% set("labels", c(alabama_label, alaska_label))

Но это не сработало. Это дало мне только значение из USArrests[1,1] и USArrests[2,1] в качестве метки.

Поэтому мне просто интересно, как я могу пометить дендрограмму всеми строками?


person Steven Cunden    schedule 23.08.2018    source источник


Ответы (1)


Ну вот:

# library("ggplot2")
## library("ggdendro") ## this package is not relevant for your question. (and in general it is mostly deprecated compared with the features from dendextend)


library(dendextend)
data(USArrests)

dend <- USArrests %>%  scale %>% 
        dist %>% hclust %>% as.dendrogram %>% 
        set("labels_cex", 0.75) # Change size

USArrests_dend_order <- USArrests[order.dendrogram(dend), ]
new_labels <- paste(rownames(USArrests_dend_order), apply(USArrests_dend_order,1,paste,collapse="_"))

dend2 <- dend
labels(dend2) <- new_labels # the labels assignment function is from dendextend


par(mfrow = c(1,2), mar = c(2,0,0,4))
plot(dend, horiz = T)
par(mar = c(2,0,0,10))
plot(dend2, horiz = T)

Выходные данные возвращают дендрограмму с правильными метками, с тем, что вы хотели добавить:

введите здесь описание изображения

person Tal Galili    schedule 25.08.2018