0

对于给定的深度截止,我有dendrogramcut的分支。然后我想使用它来绘制它ggplot并限制翻转的 y 轴:

set.seed(10)
mat <- matrix(rnorm(24*10,mean=1,sd=2),nrow=24,ncol=10)
dend <- as.dendrogram(hclust(dist(mat)))

我保存树状图的深度以限制绘图:

require(data.tree)
dend.depth <- as.Node(dend)$plotHeight

我剪了dendrogram

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

dendrogram使用dendextend

require(dendextend)
gg.dend <- as.ggdend(dend)

在不限制 y 轴的情况下绘图gg.dend会产生不在同一行结束的分支:

require(ggplot2)

ggplot(gg.dend,labels=F)+scale_y_reverse()+coord_flip()

在此处输入图像描述

所以我想我可以通过将 y 轴限制在dend.depth和之间来解决这个问题depth.cutoff。但这并不好:

ggplot(gg.dend,labels=F)+scale_y_reverse(lim=c(dend.depth,tol.level))+coord_flip()

在此处输入图像描述 任何想法?

4

2 回答 2

0

操纵 gg.dend$seqments data.frame 做到这一点:

set.seed(10)
mat <- matrix(rnorm(24*10,mean=1,sd=2),nrow=24,ncol=10)
dend <- as.dendrogram(hclust(dist(mat)))
require(data.tree)
dend.depth <- as.Node(dend)$plotHeight
depth.cutoff <- 11
dend <- cut(dend,h=depth.cutoff)$upper
require(dendextend)
gg.dend <- as.ggdend(dend)
require(ggplot2)
ggplot(gg.dend,labels=F)+scale_y_reverse()+coord_flip()

在此处输入图像描述

将导致叶子的垂直段更改为在最高叶子处结束

leaf.heights <- dplyr::filter(gg.dend$nodes,!is.na(leaf))$height
leaf.seqments.idx <- which(gg.dend$segments$yend %in% leaf.heights)
gg.dend$segments$yend[leaf.seqments.idx] <- max(gg.dend$segments$yend[leaf.seqments.idx])
ggplot(gg.dend,labels=F)+scale_y_reverse()+coord_flip()

在此处输入图像描述

于 2017-02-02T23:07:55.460 回答
0

像这样的东西?使用“挂起参数”并给它一个负值以使所有分支变平

set.seed(10)
mat <- matrix(rnorm(24*10,mean=1,sd=2),nrow=24,ncol=10)
dend <- as.dendrogram(hclust(dist(scale(mat), method = "euclidean"), method="ward.D2"))
depth.cutoff <- 11
dend2 <- cut(dend, h=depth.cutoff)$upper
nodePar <- list(lab.cex = 0.6, pch = c(NA, 19), cex = 0.7, col = "blue")
plot(hang.dendrogram(dend2, hang = - 0.1),horiz = T, nodePar = nodePar )
于 2017-02-02T03:20:23.567 回答