Как добавить метки к нескольким графикам ggplot (A, B, C)

plotЯ пытаюсь добавить метки A, B и C в верхний левый угол каждого из этих графиков. Я пробовал cowplot::draw_plot_label(), но ничего не работает. Кто-нибудь может помочь?

Эти метки A, B и C не являются основным заголовком каждого графика.

# Packages
library(ggplot2)
library(gridExtra)
library(cowplot)

# 1st plot
p1 <- ggplot(data = new_data %>% 
               filter(Species =="Sharksucker_Remora")) +
  scale_colour_manual(values=c(Sharksucker_Remora="black"), labels = c("Sharksucker Remora")) + 
  geom_line(mapping = aes(x = Date, y = Proportion, group = Species, colour = Species)) + 
  xlab("") + 
  ylab("Proportion") + 
  theme(legend.position="top") +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1)) + labs(colour = ~italic(M.alfredi)~"Hitchhiker Species:") +
  theme(legend.key=element_blank())

# 2nd plot
p2 <- ggplot(data = new_data %>% 
               filter(Species !="Sharksucker_Remora")) +
  geom_line(mapping = aes(x = Date, y = Proportion, group = Species, colour = Species)) + 
  scale_colour_manual(values=c(Golden_Trevally="goldenrod2", Red_Snapper="firebrick2", Juvenile_Remora="darkolivegreen3"), labels = c("Juvenile Remora", "Golden Trevally", "Red Snapper")) + 
  xlab("") + ylab("Proportion") + labs(colour = "") + theme(legend.position="top") +  theme(legend.key=element_blank()) +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))

# 3rd plot
p3 <- ggplot(data = new_data_counts) +
  geom_bar(mapping = aes(x = Date, y = Count), stat =
             'identity') +
  xlab("Date (2015-2019)") +  ylab("Total"~italic
                                   (M.alfredi)~"Sightings") +
  draw_plot_label(label =c("C") + theme(axis.text.x =          
                                          element_text(angle = 90, vjust = 0.5, hjust   = 1))
                  
# The grid
grid.arrange(p1,p2,p3)

person Aimee Nicholson-Jack    schedule 04.11.2020    source источник


Ответы (2)


Я предлагаю вам использовать labs(..., tag = ...) и theme(plot.tag = element_text()). Код показывает, как вы можете отформатировать основной заголовок (здесь по центру с hjust = 0.5) и тег внутри функции theme(). Смотрите воспроизводимый пример ниже:

# Packages
library(ggplot2)
library(gridExtra)
# library(cowplot) # not necessary here

# Plots
p1 <- ggplot() +
  labs(title = "plot 1", tag = "A") +
  theme(plot.title = element_text(hjust = 0.5),
        plot.tag = element_text())

p2 <- ggplot() +
  labs(title = "plot 2", tag = "B") +
  theme(plot.title = element_text(hjust = 0.5),
        plot.tag = element_text()) 

grid.arrange(p1, p2)

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

Если вы хотите, чтобы тег (A, B, C) находился внутри области построения, это сообщение предлагает использовать plot.tag.position = c(x, y). См., например:

p3 <- ggplot() +
  labs(title = "plot 3", tag = "C") +
  theme(plot.title = element_text(hjust = 0.5),
        plot.tag = element_text(),
        plot.tag.position = c(0.1, 0.8))
p3

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

person Paul    schedule 05.11.2020
comment
Большое спасибо! так полезно. Мне было интересно, знаете ли вы также, как удалить заголовок оси x p3 (дата 2015-2019), чтобы он был ниже, как сейчас, если он очень близок к меткам оси x ?? - person Aimee Nicholson-Jack; 05.11.2020
comment
@AimeeNicholson-Jack, добро пожаловать :) вы можете удалить элемент из графика, используя theme() и element_blank(), например: theme(axis.title.x = element_blank())) - person Paul; 05.11.2020
comment
Привет, извините, я не хотел удалить (отбросить) его полностью. Я хотел отрегулировать его положение, чтобы он располагался ниже от меток оси X. Это имеет больше смысла? - person Aimee Nicholson-Jack; 05.11.2020
comment
@AimeeNicholson-Джек, мой плохой, я слишком быстро прочитал ваш комментарий, я думаю, что это возможно с использованием theme(axis.title.x = element_text(vjust = -0.4) (или любого другого значения, которое вам нужно) - person Paul; 05.11.2020
comment
@AimeeNicholson-Jack, в этом посте есть более подробная процедура: stackoverflow.com/a/10840417/10264278, поскольку вам может понадобиться увеличьте поля вокруг графика, чтобы освободить место для заголовка. - person Paul; 05.11.2020
comment
как это можно использовать с facet_wrap/facet_grid, когда указание labs(title = "plot 1", tag = "A") на самом деле невозможно? - person E. Moore; 24.06.2021
comment
@ Э.Мур, я не уверен, что понимаю. Если вы хотите изменить метки фасетов, вы должны использовать аргумент и функцию labeller: facet(..., labeller = labeller(...)) ie stackoverflow.com/questions/48860158/ - person Paul; 28.06.2021

Вы пробовали пакет egg? https://cran.r-project.org/web/packages/egg/vignettes/Overview.html

library(tidyverse)
library(magrittr)
data <- list()
for(i in 1:6) data[[i]] <- rnorm(100,0,1)
data %<>% bind_cols() %>% setNames(paste0("var",1:6))
p1 <- ggplot(data,aes(x = var1, y = var2)) + geom_point()
p2 <- ggplot(data,aes(x = var3, y = var4)) + geom_point()
p3 <- ggplot(data,aes(x = var5, y = var6)) + geom_point()
egg::ggarrange(p1,p2,p3,ncol = 1,
               labels = c("A","B","C"))
person Yang Liu    schedule 04.11.2020
comment
@Yang Liu, кажется интересным, не могли бы вы рассказать немного больше о том, как можно использовать этот пакет? - person Paul; 05.11.2020
comment
Добавлен пример @Paul. - person Yang Liu; 05.11.2020