如何将标签添加到多个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,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,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,hjust   = 1))
                  
# The grid
grid.arrange(p1,p2,p3)

解决方法

您是否尝试过软件包egghttps://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,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"))
,

我建议您使用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)

enter image description here

如果您希望标签(A,B,C)位于绘图区域内,则this post建议使用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

enter image description here