在 ggplot 区域外添加文本

Adding text outside the ggplot area

我正在尝试使用 ggplot2 制作组合图表。但是我想在我的情节主体之外添加一个文本框排序。我无法将其放置在所需位置

我使用网格包创建了 grob,并将其包含在 ggplot 代码的注释中。此外,我还在 geom_text 中放入了相同的文本。我如何确保文字出现在图例下方。以下是我的代码

m <- ggplot() +
  geom_area(data= (ly_vol_ntwk %>%
                     mutate(Wk_end_d = as.factor(Wk_end_d))%>%
                     filter(!is.na(value_new))),
            aes(x = Wk_end_d, y = value_new ,group = variable,fill=variable))+ 
  geom_bar(data = (fcst_act_vol_ntwk %>% 
                     mutate(Wk_end_d = as.factor(Wk_end_d))%>%
                     filter(!is.na(value_new))),
           aes(x = Wk_end_d, y = value_new, group = variable, fill = variable), 
           stat = "identity",position = "dodge", width =0.5)+
  geom_line(data = (var_vol_ntwk %>% 
                      mutate(Wk_end_d = as.factor(Wk_end_d))%>%
                      filter(!is.na(value_new))),
            aes(x = Wk_end_d, y = value_new, 
                group = variable, fill= variable), size = 0.8)+ 
  scale_y_continuous(sec.axis = sec_axis(trans = ~./100000, 
                                         name = "Variance", breaks = waiver(),
                                         labels=function(x) paste0(x,"%")))+ 
  theme_set(theme_bw())+ 
  theme(axis.text.x = element_text(angle=65, vjust=0.5,face = "plain"),
        text = element_text(size=9), legend.position = "bottom", legend.title = element_blank())+ 
  labs(title= "Inbound - Network", x= "Week end date", y = " ")+ 
  scale_fill_manual(values = c("#C5E0B4","#7030A0", "#D9D9D9","#ED7D31","black"))+ 
  geom_text(label = "LW Variance",
            aes(x = 19, y = -1960000),
            check_overlap = TRUE) #annotation_custom(grob = textGrob("LW Variance"), xmin = 18, xmax = 18, ymin = -1030000, ymax = -1030000)+ coord_cartesian(clip = 'off')

我需要在 ggplot 区域之外获取带有边框的文本框。你能帮帮我吗?

您可以使用 labs(caption = "text") 将文本放置在绘图区域下方,但不能将标题放置在绘图上方。但是,您可以使用字幕 labs(subtitle = "text") 在顶部生成类似的字幕视觉效果。

要进一步控制这两个选项的方面,请使用 theme(plot.caption = element_text(...), plot.subtitle = element_text(...))。在您的控制台中输入 ?element_text 以获取所有文本格式选项。

例如:

library(ggplot2)

df <- data.frame(x = rnorm(50), y = rnorm(50))

ggplot(df, aes(x, y)) +
  geom_point() +
  labs(subtitle = "Your text here", caption = "Your text here") +
  theme(plot.caption = element_text(colour = "red", hjust = 0, angle = 15),
        plot.subtitle = element_text(size = 18, face = "bold", hjust = 0.8))

如果您希望它位于当前图例下方,您可以随时添加一个虚拟图例并将您的文字作为其名称。一个例子:

ggplot(mtcars, aes(mpg, wt, color = gear,fill = "a")) + 
  geom_point() + 
  scale_fill_discrete(name = "Your custom caption\ngoes here", labels = "") + 
  theme(legend.key = element_rect(fill = "white")) +
  guides(color = guide_legend(order = 1),
      fill = guide_legend(order = 2, override.aes = list(linetype = 0, shape=NA))) # setting the order parameter in guide_legend will help place it below your existing legend(s)