Маркировка ggdendro оставляет в нескольких цветах

У меня есть ситуация, когда я рисую дендрограмму с точками данных, которые поставляются с метками класса. Я хочу видеть, что агломеративные группы кластеров объединяют те же метки. Цветовое кодирование этикеток позволяет легко читать такую ​​дендрограмму. Есть ли способ, которым мы можем достичь этого с помощью ggdendro в R?

Ответ 1

Похищение большей части настроек из этого сообщения...

library(ggplot2)
library(ggdendro)
data(mtcars)
x <- as.matrix(scale(mtcars))
dd.row <- as.dendrogram(hclust(dist(t(x))))
ddata_x <- dendro_data(dd.row)

p2 <- ggplot(segment(ddata_x)) +
  geom_segment(aes(x=x, y=y, xend=xend, yend=yend))

... и добавление фактора группировки...

labs <- label(ddata_x)
labs$group <- c(rep("Clust1", 5), rep("Clust2", 2), rep("Clust3", 4))
labs
#     x y text  group
# 1   1 0 carb Clust1
# 2   2 0   wt Clust1
# 3   3 0   hp Clust1
# 4   4 0  cyl Clust1
# 5   5 0 disp Clust1
# 6   6 0 qsec Clust2
# 7   7 0   vs Clust2
# 8   8 0  mpg Clust3
# 9   9 0 drat Clust3
# 10 10 0   am Clust3
# 11 11 0 gear Clust3

... вы можете использовать аргумент aes(colour=) для geom_text() для окраски ваших меток:

p2 + geom_text(data=label(ddata_x),
               aes(label=label, x=x, y=0, colour=labs$group))

enter image description here

(Если вы хотите предоставить свои собственные цвета, вы можете использовать scale_colour_manual(), делая что-то вроде этого:

p2 + geom_text(data=label(ddata_x),
               aes(label=label, x=x, y=0, colour=labs$group)) +
     scale_colour_manual(values=c("blue", "orange", "darkgreen"))