我有dendrogram
我cut
给定深度截止值的分支。然后我想用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()
答案 0 :(得分: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 )
答案 1 :(得分: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()