Вырезание кластера из дендрограммы
Я использую эту ссылку, чтобы построить хорошую дендрограмму с цветными метками в соответствии с категориями. Второй ответ - это то, на что я смотрю в этой ссылке ( вырезание дерева и прямоугольники вокруг кластеров для горизонтальной дендрограммы в R), в котором используется код ниже:
d <- dist(t(mat[,3:ncol(mat)]), method = "euclidean")
H.fit <- hclust(d, method="ward")
groups <- cutree(H.fit, k=16) # cut tree into clusters
hcdata<- dendro_data(H.fit, type="rectangle")
hcdata$labels <- merge(x = hcdata$labels, y = pm_gtex_comb, by.x = "label", by.y = "sample",all=TRUE)
ggplot() +
geom_segment(data=segment(hcdata), aes(x=x, y=y, xend=xend, yend=yend)) +
geom_text(data=label(hcdata), aes(x, y, label=label, hjust=0, color=cluster),
size=3) +
geom_rect(data=rect, aes(xmin=X1-.3, xmax=X2+.3, ymin=0, ymax=ymax),
color="red", fill=NA)+
geom_hline(yintercept=0.33, color="blue")+
coord_flip() + scale_y_reverse(expand=c(0.2, 0)) +
theme_dendro()
Я хочу вырезать некоторые из кластеров, так как у меня есть 16 кластеров с 145 метками, так что я могу просматривать только несколько кластеров, так как хочу сфокусировать / вырезать / увеличить только пару из них. Есть ли способ сделать это на объекте hclust . Это только для того, чтобы иметь хорошую визуализацию, поскольку фигура запуталась с 145 метками. Так как я хочу раскрасить в соответствии с метками, я думаю, ggdendro подходит довольно хорошо.
Например, в этой ссылке, если вы посмотрите на 3) Увеличение на дендрограммах http://gastonsanchez.com/blog/how-to/2012/10/03/Dendrograms.html
1 ответ
Вы могли бы попробовать prune
из пакета dendextend
(который может сделать много других изящных вещей):
library(dendextend)
hc <- hclust(dist(USArrests), "ave")
clusters <- cutree(hc, k=3)
par(mfrow=c(1,2), mar=c(6, 4, 2, 3))
plot(as.dendrogram(hc), main="regular")
plot(dend <- prune(as.dendrogram(hc), names(clusters[clusters==1])),
ylim=range(hc$height), main="without cluster #1")
или если вы настаиваете на ggdendro:
ggdendro::ggdendrogram(dend)
График ggplot2 может быть создан также с помощью dendextend:
library(dendextend)
ggd1 <- as.ggdend(dend)
library(ggplot2)
ggplot(ggd1)