Корректировки на графике кластерной дендрограммы - PullRequest
0 голосов
/ 07 марта 2020

У меня небольшая проблема с генерацией кластерной дендрограммы.

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

Расстояние между именами по оси X и концом линий с делениями группы огромно и излишне покрывает большую часть графика, я очень хотел бы уменьшить это (зеленые отметины на изображении). В результате я хотел бы, чтобы шкала на оси Y увеличилась (синие отметки на изображении).

Кто-нибудь знает, как решить эту проблему? Я искал документацию для rect.hclust и не нашел аргументов для внесения этих корректировок.

Чтобы облегчить понимание, я прилагаю сценарий и изображение сгенерированной дендрограммы и то, что я хотел бы, чтобы произошло.

Большое спасибо за ваше внимание (и помощь)!

image

pts <- read_excel("C:/pts.xlsx")
row.names(pts) <- c("Painting","Dance","Photo", "Cinema","Book","Music")
matrix = dist(pts, "euclidean")
group = hclust(matrix, "ward.D")
hcd <- as.dendrogram(group)
dend_data <- dendro_data(hcd, type = "rectangle")
plot(group, hang=-1)
rect.hclust(group, k=3, border="red")

1 Ответ

0 голосов
/ 07 марта 2020

Я думаю, что Hang = -1 работает, если я не понял вас неправильно:

png("base.png",width=400,height=600)
group=hclust(dist(mtcars))
plot(group, hang=-1,cex=0.7)
rect.hclust(group, k=3, border="red")
dev.off()

enter image description here

С ggdendro рисование прямоугольников не тривиально, но вы можете попробовать использовать цветовую маркировку:

library(ggdendro)
library(ggplot2)
hcdata <- dendro_data(group)
cluster_id <- cutree(group,3)[as.character(hcdata$labels$label)]
cluster_cols <- c("#b590ca","#a8d3da","#f5cab3")

ggplot() +
geom_segment(data=hcdata$segments, aes(x=x, y=y, xend=xend, yend=yend)) +
scale_x_continuous(breaks = seq_along(hcdata$labels$label), 
            labels = hcdata$labels$label)+
theme_dendro()+
theme(axis.text.x = element_text(angle = 90, 
hjust = 1,colour=cluster_cols[cluster_id])) + 
theme(axis.text.y = element_text(angle = 90, hjust = 1))

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...