2015-10-29 64 views
1

我正在使用此链接根据类别绘制带有彩色标签的树状图。 第二个答案是什么,我在使用下面的代码此链接(Tree cut and Rectangles around clusters for a horizontal dendrogram in R)看:我要切出一些簇的,因为我有16个簇,与145个标签,这样从树状图中删除一个簇

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() 

我只能查看几个集群,因为我只想聚焦/剪切/放大其中的几个。是否有任何方法可以在hclust对象上执行此操作。这仅仅是因为具有良好的可视化性,因为数字变得杂乱无章,有145个标签。因为我想根据标签颜色,我认为ggdendro很适合。

例如在这个环节上,如果你看一下3)缩放,在树状图 http://gastonsanchez.com/blog/how-to/2012/10/03/Dendrograms.html

回答

2

你可以从包装dendextend(它可以做lots of other nifty things)尝试prune

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