2

我有一个dendrogram

set.seed(10)
mat <- matrix(rnorm(20*10),nrow=20,ncol=10)
dend <- as.dendrogram(hclust(dist(mat)))

并给出一个深度截止:

我想切断该截止点右侧的所有分支。

depth.cutoff <- 4.75

我想切断虚线右侧的所有分支:

plot(dend,horiz = TRUE)
abline(v=depth.cutoff,col="red",lty=2)

在此处输入图像描述

最后得到这个dendrogram

在此处输入图像描述

我得到的最接近的是使用ape's drop.tip,但问题是如果 mydepth.cutoff包括所有叶子,如本例所示,它返回NULL.

也许有人知道我是否以及如何从nested list代表我的元素中删除元素(dendrogram如果它们depth在下方)depth.cutoff

或者,也许我可以将 转换dendrogram为 a data.frame,其中还列出了depth每个node(包括将具有 = 0 的叶子),从 thatdepth删除所有行,然后将其转换回 a ?depth < depth.cutoffdata.framedendrogram

4

2 回答 2

2

cut将在指定高度切割树。它将返回upperlower部分的列表

cut(dend, h = depth.cutoff)$upper

# $upper
# 'dendrogram' with 2 branches and 5 members total, at height 5.887262 
# 
# $lower
# $lower[[1]]
# 'dendrogram' with 2 branches and 6 members total, at height 4.515119 
# 
# $lower[[2]]
# 'dendrogram' with 2 branches and 2 members total, at height 3.789259 
# 
# $lower[[3]]
# 'dendrogram' with 2 branches and 5 members total, at height 3.837733 
# 
# $lower[[4]]
# 'dendrogram' with 2 branches and 3 members total, at height 3.845031 
# 
# $lower[[5]]
# 'dendrogram' with 2 branches and 4 members total, at height 4.298743


plot(cut(dend, h = depth.cutoff)$upper, horiz = T)

在此处输入图像描述

于 2017-02-02T00:09:26.037 回答
2

获取图片的一种更直接的方法可能是设置您想要绘制的限制。

plot(dend, horiz = TRUE, xlim=c(6,4.75))

裁剪树状图

于 2017-02-02T00:28:41.690 回答