Сохранение цвета метки и легенды на 2 дендограммах
Цель: я хотел бы сохранить цвет метки и цвет легенды на двух дендограммах, созданных для одного и того же набора данных.
У меня есть тот же набор данных (40 наблюдений), который преобразуется в дендограмму в 2 процессах (предварительно отфильтрованных и отфильтрованных). Однако цвета меток меняются в зависимости от того, как они кластеризуются (и, следовательно, меняется порядок меток в дендограмме).
Вот фрагмент кода:
library(dendextend)
small_mtcars <- head(mtcars)
small_mtcars
d1 = small_mtcars %>% select(mpg, cyl, disp) %>% dist() %>% hclust(method = "average") %>% as.dendrogram()
d2 = small_mtcars %>% select(mpg, cyl, disp) %>% dist() %>% hclust(method = "complete") %>% as.dendrogram()
par(mar = c(10,4,4,2) + 0.1)
# Plotting d1
test <- d1 %>%
set("labels_cex",0.7) %>%
plot(main="d1")
legend("topright", legend=unique(rownames(small_mtcars)[order.dendrogram(d1)]), cex=0.75, bty="n",
fill=seq(1,length(unique(rownames(small_mtcars)[order.dendrogram(d1)]))))
# Plotting d2
test2 <- d2 %>%
set("labels_cex",0.7) %>%
plot(main="d2")
legend("topright", legend=unique(rownames(small_mtcars)[order.dendrogram(d2)]), cex=0.75, bty="n",
fill=seq(1,length(unique(rownames(small_mtcars)[order.dendrogram(d2)]))))
Основываясь на фрагменте кода выше, вот две вещи, которые я хочу достичь
- Цветовая легенда должна быть одинаковой для обеих дендограмм (на прилагаемых изображениях модель Valiant зеленая в d1_dendogram, но фиолетовая в d2_dendogram)
- Я хотел бы раскрасить этикетку листа тем же цветом, что и легенда
Заранее спасибо.
1 ответ
Решение
У вас есть много вещей, которые нужно сделать заново в вашем коде. Я исправил это так, теперь это работает. Если у вас есть дополнительные вопросы, вы можете опубликовать их как комментарий:)
library(dendextend)
library(dplyr)
small_mtcars <- head(mtcars) %>% select(mpg, cyl, disp)
small_mtcars
d1 = small_mtcars %>% dist() %>% hclust(method = "average") %>% as.dendrogram()
d2 = small_mtcars %>% dist() %>% hclust(method = "complete") %>% as.dendrogram()
library(colorspace)
some_colors <- rainbow_hcl(nrow(small_mtcars))
d1_col <- some_colors[order.dendrogram(d1)]
d2_col <- some_colors[order.dendrogram(d2)]
labels_colors(d1) <- d1_col
labels_colors(d2) <- d2_col
par(mfrow = c(1,2))
# Plotting d1
the_labels <- rownames(small_mtcars)
d1 %>%
set("labels_cex",0.7) %>%
plot(main="d1", xlim = c(1,9))
legend("topright", legend=the_labels, cex=0.75, bty="n",
fill=some_colors)
# Plotting d2
d2 %>%
set("labels_cex",0.7) %>%
plot(main="d2", xlim = c(1,9))
legend("topright", legend=the_labels, cex=0.75, bty="n",
fill=some_colors)
ВЫХОД: