2013-04-28 91 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