Цветовые ветви дендрограммы на основе столбца в информационном кадре - PullRequest
2 голосов
/ 18 апреля 2019

Я хочу раскрасить ветви дендрограммы на основе значения в столбце кадра данных, используемого в функции hclust.

Прежде чем пометить этот вопрос как дубликат, как это было сделано в этом вопросе , который ссылается на этот вопрос . Обратите внимание, что это на самом деле никогда не было полностью учтено в ответе. Легко раскрасить ветви на основе топологии дендрограммы, но я не могу понять, как раскрасить ветви на основе столбца в кадре данных, который использовался в функции hclust.

Я пытался использовать пакет dendextend двумя очень похожими способами:

library(dendextend)
par(mar = c(2,1,0,8)) #make sure the whole plot is on the page
hc <- hclust(dist(mtcars)) #cluster dataframe based on distance
dend <- as.dendrogram(hc) #use dendextend to create dendrogram
dend2 <- color_branches(dend, col = mtcars$cyl) #attempt but fail at coloring branches
plot (dend2, horiz = TRUE) #plot dendrogram

и

dend3 <- assign_values_to_leaves_edgePar(dend, value = mtcars$cyl, edgePar = "col") #attempt but fail at coloring branches
plot (dend3, horiz = TRUE) #plot dendrogram

замена mtcars$cyl на factor(mtcars$cyl также не решает проблему.

Оба эти решения создают дендрограмму, которая не окрашена должным образом. enter image description here Похоже, что он упорядочивает цвета снизу вверх в верхней части дендрограммы, основываясь на порядке значений в столбце цил, но поскольку ветви больше не находятся в этом порядке, раскраска не имеет никакого смысла. Я бы предпочел не сортировать фрейм данных для решения этой проблемы.

Спасибо.

1 Ответ

2 голосов
/ 18 апреля 2019

Вам нужно расставить цвета в порядке листьев дендрограммы.Вы можете использовать labels() для извлечения имен, используемых на листьях

dend2 <- color_branches(dend, col=mtcars[labels(dend),"cyl"])

enter image description here

...