2015-10-29 11 views
1

Я использую эту ссылку для создания красивой дендрограммы с цветными ярлыками в соответствии с категориями. Второй ответ, что я смотрю на в этой ссылке (Tree cut and Rectangles around clusters for a horizontal dendrogram in R), который использует код ниже:Вырезание кластера из dendrogram

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

ответ

2

Вы можете попробовать prune из пакета dendextend (который может сделать lots of other nifty things):

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) 
+0

Благодаря @lukeA, я хотел бы добавить, что dendextend приходит с интеграцией в ggplot2 (на основе фактически на ggdendro, но позволяет дендрограммы участков включать графические параметры, такие как цвет и ширину линии и тип). Здесь вы можете увидеть примеры: https://cran.r-project.org/web/packages/dendextend/vignettes/introduction.html#ggplot2-integration –

+1

Спасибо @TalGalili - на самом деле я попробовал это Точно, но 'as.ggdend' выдал ошибку (« Ошибка в FUN (X [[i]], ...): индекс за пределами границ »), поэтому я вернулся к ggdendrogram. :) У меня нет последней версии, хотя ... – lukeA

+0

Обрезка как-то не работает для меня. Результат остается таким же, как и обычный сюжет. – user45292