Перевернуть 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)

1 ответ

Решение

Дело в том, что код 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() функция, потому что она не позволяет настройку 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()

Это дает:

Другой способ для вас изменить ggdendrogram функционировать в соответствии с вашими потребностями и перекомпилировать его. Я думаю, что гораздо проще сделать это таким образом, и это вполне то, что вы хотите:

Другие вопросы по тегам