在绘制ggdend对象时,在scale_y_reverse中设置lim

时间:2017-02-02 02:40:39

标签: r ggplot2 dendextend

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

enter image description here

所以我认为我可以通过将y轴限制在dend.depthdepth.cutoff之间来解决这个问题。但这并不是很好:

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

enter image description here 有什么想法吗?

2 个答案:

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

enter image description here

更改导致树叶在最高叶片处结束的垂直线段

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

enter image description here