2013-04-28 3 views
2

Я использую ggdendrogram для построения дендрограммы, но хочу, чтобы метки были слева, чтобы сделать график более интуитивным. Как мне это сделать? Благодаря!!!Флип ggdendrogram plot

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

Дело в том, что код 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 would't оправдано правильно. И вы не можете многое сделать в пределах функции ggdendrogram(), потому что она не позволяет устанавливать hjust и angle свойства извне.

Итак, я предлагаю для вашего случая, что вы сами создаете 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

+1

+1 Это именно то, что я имел в виду при написании 'ggdendrogram' - вместо того, чтобы пытаться удовлетворить все возможные ситуации, он просто служит (надеюсь, полезным) шаблоном, чтобы катить ваши собственные решения ggplot. – Andrie

+0

В новой версии dev 'ggdendro' я включил эту ориентацию как значение по умолчанию в' ggdendrogram' – Andrie

Смежные вопросы