Раскрасьте метки оси или нарисуйте прямоугольники над осью в ggplot2

#r #ggplot2 #ggdendro

#r #ggplot2 #ggdendro

Вопрос:

Я хочу создать красивую дендрограмму с помощью ggplot2.

Это воспроизводимый пример того, что я делаю:

 library(ggplot2)
library(ggdendro)
data(mtcars)
x <- as.matrix(scale(mtcars))
dd.row <- as.dendrogram(hclust(dist(t(x))))

mtcars_dendrogram <- ggdendrogram(dd.row, rotate = TRUE, theme_dendro = FALSE)  
  labs(x="", y="Distance")  
  ggtitle("Mtcars Dendrogram")   
  theme(panel.border = element_rect(colour = "black", fill=NA, size=.5), 
        axis.text.x=element_text(colour="black", size = 10), 
        axis.text.y=element_text(colour="black", size = 10),
        legend.key=element_rect(fill="white", colour="white"),
        legend.position="bottom", legend.direction="horizontal", 
        legend.title = element_blank(),
        panel.grid.major = element_line(colour = "#d3d3d3"), 
        panel.grid.minor = element_blank(), 
        panel.border = element_blank(), 
        panel.background = element_blank(),
        plot.title = element_text(size = 14, family = "Tahoma", face = "bold"), 
        text=element_text(family="Tahoma"))
mtcars_dendrogram <- mtcars_dendrogram  
  annotate("rect", xmin = 0.6, xmax = 5.4, ymin = 0, ymax = 6.4, fill="red", colour="red", alpha=0.1)  
  annotate("rect", xmin = 5.6, xmax = 7.4, ymin = 0, ymax = 6.4, fill="blue", colour="blue", alpha=0.1)  
  annotate("rect", xmin = 7.6, xmax = 11.4, ymin = 0, ymax = 6.4, fill="orange", colour="orange", alpha=0.1)  
  geom_hline(yintercept = 6.4, color = "blue", size=1, linetype = "dotted")
mtcars_dendrogram
  

Это результат

mtcars_dendrogram

Я хочу расширить прямоугольники так, чтобы они покрывали ось x. Если я изменю, например,

 annotate("rect", xmin = 5.6, xmax = 7.4, ymin = 0, ymax = 6.4, fill="blue", colour="blue", alpha=0.1)
  

Для

 annotate("rect", xmin = 5.6, xmax = 7.4, ymin = -1, ymax = 6.4, fill="blue", colour="blue", alpha=0.1)
  

Тогда я получаю это

mtcars_dendrogram_2

Это то, что я хочу получить (этот результат был изменен с помощью Photoshop)

mtcars_dendrogram_3

Любая помощь приветствуется. Заранее большое спасибо.

Ответ №1:

Вы можете подделать левую ось:

 mtcars_dendrogram <- mtcars_dendrogram  
annotate("rect", xmin = 0.6, xmax = 5.4,  ymin = -1, ymax = 6.4, fill="red", colour="red", alpha=0.1)  
  annotate("rect", xmin = 5.6, xmax = 7.4,  ymin = -1, ymax = 6.4, fill="blue", colour="blue", alpha=0.1)  
  annotate("rect", xmin = 7.6, xmax = 11.4, ymin = -1, ymax = 6.4, fill="orange", colour="orange", alpha=0.1)  
  geom_hline(yintercept = 6.4, color = "blue", size=1, linetype = "dotted")  
  theme(axis.text.y = element_blank(),
        axis.line.y = element_blank(),
        axis.ticks.y = element_blank())   
  geom_text(aes(y = 0, x = 1:11, 
                label = c("carb", "wt", "hp", "cyl", "disp", "qsec", "vs", "mpg", "drat", "am", "gear")),
            hjust = "right",
            nudge_y = -.1))
  

введите описание изображения здесь