Добавить вертикальный текст на верхнем поле ggplot

#r #ggplot2 #graph #tidyverse

#r #ggplot2 #График #tidyverse

Вопрос:

У меня есть следующий код для графика

 ggplot(na.omit(total), aes(x = day_after, y = use, group=t, na.rm=TRUE))  
  geom_line(aes(linetype=t, color=t, na.rm=TRUE)) 
  geom_point(aes(color=t, na.rm = TRUE))  
  scale_color_manual(values=c("gray48", "indianred4"), labels=c("Treatment","Control"))  
  labs(x= "Days after beginning of deactivation period", y= "")  
  theme(panel.grid.minor = element_blank(),
        panel.background = element_blank())  
  theme(panel.grid.major.x = element_blank(),
    panel.grid.major.y = element_line( size=.1, color="grey")) 
  theme(legend.key=element_blank())  
  guides(linetype = FALSE)  
  annotate('segment',x = 0,xend = 0,y = 0,yend = 60,size = 3,colour = "grey",
           alpha = 0.4)  
  annotate('segment',x = 7,xend = 7,y = 0,yend = 60,size = 3,colour = "grey",
                                 alpha = 0.4)  
  annotate('segment',x = 39,xend = 39,y = 0,yend = 60,size = 3,colour = "grey",
           alpha = 0.4) 
new_plot <- plot   theme(legend.title=element_blank(), legend.text = element_text(size=10),
      legend.position = "right")
  

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

Что я хочу сделать, так это добавить вертикальный текст в верхней части графика с несколькими заданными значениями (x, y) вне графика.
Annotate_custom работает, но у него нет возможности поворачивать текст. В принципе, я попробовал annotation_custom(text_end,xmin=42,xmax=42,ymin=62,ymax=62)
Что было бы удивительно, только у меня не может быть такой опции, как angle = 90.
Любая помощь??

Ответ №1:

Вы можете использовать annotation_custom , если отключите обрезку. Вы можете использовать пользовательский grid::textGrob параметр для указания поворота.

У меня нет ваших данных, но примера с использованием встроенного mtcars набора данных должно быть достаточно для иллюстрации.

 library(ggplot2)

ggplot(mtcars, aes(disp, mpg))   
  geom_point()  
  geom_vline(xintercept = c(200, 400), size = 10, alpha = 0.05)  
  coord_cartesian(clip = "off")  
  theme_bw()  
  theme(plot.margin = margin(80, 20, 20, 20),
        panel.border = element_blank())  
  annotation_custom(grid::textGrob("label 1", rot = 90), 
                    xmin = 200, xmax = 200, ymin = 40)  
  annotation_custom(grid::textGrob("label 2", rot = 90), 
                    xmin = 400, xmax = 400, ymin = 40)
  

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

Комментарии:

1. Спасибо!! но когда я это делаю, текст стирается, как только он выходит из графика…

2. Вы не забыли повернуть clip = "off" внутрь coord_cartesian ?