翻转ggdendrogram图

时间:2013-04-28 11:27:30

标签: r plot ggplot2 flip ggdendro

我正在使用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)

1 个答案:

答案 0 :(得分:4)

重点是ggdendrogram执行此操作时的代码rotate=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函数并重新编译。我觉得用这种方式做起来要容易得多,也是你想要的: