2013-04-28 69 views
2

我正在使用ggdendrogram绘制树状图,但我想让左侧的标签使图更直观。我该怎么做呢?谢谢!!!翻转ggdendrogram图

library(ggplot2) 
library(ggdendro) 

### Data 
countries <- c("UK","AU","SA","CH") 
distmatrix <- matrix(c(0.00, 0.16, 1.01, 0.97, 0.16, 0.00, 0.84, 0.79, 1.01, 0.84, 0.00, 1.49, 0.97, 0.79, 1.49, 0.00), 
nrow=4,dimnames=list(countries, countries)) 

### Cluster 
hc = hclust(as.dist(distmatrix), method = "ward") 

### Plot 
ggdendrogram(hc, rotate=TRUE, theme_dendro=FALSE) 

回答

4

的一点是,该代码ggdendrogramrotate=TRUE做到这一点:

if (rotate) { 
    p <- p + coord_flip() 
    p <- p + scale_y_reverse(expand = c(0.2, 0)) 
} 

但你不希望这样scale_y_reverse(.)做。所以,一种方法是你自己做coord_flip()

ggdendrogram(hc, rotate=FALSE, theme_dendro=FALSE) + coord_flip() 

但是,一个显而易见的问题是labels不合适。在ggdendrogram()函数中,你不能做太多的事情,因为它不允许在外部设置hjustangle属性。

所以,我建议你的情况,你自己创建ggplot()通过复制ggdendrogram函数中的行。

data <- dendro_data(hc) 
p <- ggplot() + geom_segment(data = segment(data), 
       aes_string(x = "x", y = "y", xend = "xend", yend = "yend")) 
p <- p + geom_text(data = label(data), 
       aes_string(x = "x", y = "y", label = "label"), hjust = 1, angle = 0) 
p + scale_y_continuous(expand=c(0.2, 0)) + coord_flip() 

这给:

enter image description here

另一种方法是你修改ggdendrogram功能,以您的需求,并重新编译。我认为用这种方式做起来容易多了,而且也是你想要的:

+0

这很棒,非常有帮助。这比我想象的更复杂,很好,有一个解决方案! – MatAff 2013-04-28 12:25:52

+1

+1这正是我在编写'ggdendrogram'时想到的 - 而不是试图迎合所有可能的情况,它只是作为一个(希望有用的)模板来推出自己的ggplot解决方案。 – Andrie 2013-04-29 09:00:54

+0

在'ggdendro'的新开发版本中,我在'ggdendrogram'中包含了这个方向作为默认值 – Andrie 2013-09-02 14:24:27