2013-04-28 6 views
2

저는 ggdendrogram을 사용하여 dendrogram을 플로팅하고 있습니다 만 그래프를보다 직관적으로 만들려면 왼쪽에 라벨을 붙이고 싶습니다. 어떻게해야합니까? 감사!!!플립 ggdendrogram 플롯

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

하지만 당신은 scale_y_reverse(.) 수행하는 것을 원하지 않는다 :

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이 없다는 것입니다. 따라서 한 가지 방법은 자신이 coord_flip()을 수행하는 것입니다.

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

그러나, 하나의 명백한 문제는 labels would't가 제대로 정당화한다는 것이다. 그리고 외부에서 hjustangle 속성을 설정할 수 없으므로 ggdendrogram() 함수 내에서 많은 작업을 수행 할 수 없습니다.

따라서, ggdendrogram 함수 내에서 복사하여 ggplot()을 직접 작성하는 것이 좋습니다.

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

이 제공 : 당신이 당신의 필요에 ggdendrogram 기능을 수정하고 다시 컴파일하는

enter image description here

또 다른 방법입니다. 이 방법을 사용하는 것이 훨씬 쉽고 원하는 것입니다.

+0

정말 도움이됩니다. 이것은 내가 생각했던 것보다 훨씬 복잡합니다. 해결책이 있다는 것은 대단합니다! – MatAff

+1

+1 이것은'ggdendrogram'을 작성할 때 염두에 두었던 것입니다. 가능한 모든 상황에 맞추려는 것이 아니라 ggplot 솔루션을 롤백하기위한 (잘하면 도움이되는) 템플릿 역할을합니다. – Andrie

+0

'ggdendro'의 새로운 개발 버전에서는'ggdendrogram'에이 방향을 기본값으로 포함 시켰습니다 – Andrie