将图例添加到ggarrange图

时间:2020-11-03 08:44:59

标签: r ggplot2 ggpubr

我有两个使用来自两个独立数据集(雄性对雌性)的数据的图,我使用ggarrange()并排布置了这些图。男性用实心圆圈表示,女性用实心圆圈表示。

如何添加图例,以便读者理解哪个图形来自男性数据,哪个图形来自女性数据?

这是我的代码:


Pronotum_Width_Female <- c("6.5", "7.4", "7.0","6.2", "6.3", "6.3","6.0", "6.4", "6.9","6.6", "6.8", "7.2")

Year_Female <- c("1995", "1999", "2001","2003", "2005", "2007","2008", "2009", "2010","2011", "2012", "2013")

female <- data.frame(Pronotum_Width_Female, Year_Female)

Pronotum_Width_Male <- c("6.4", "5.9", "5.8","6.2", "6.5", "6.0","6.2", "5.7", "5.8","6.0", "6.1", "6.5")

Year_Male <- c("1995", "1999", "2001","2003", "2005", "2007","2008", "2009", "2010","2011", "2012", "2013")

male <- data.frame(Pronotum_Width_Male, Year_Male)

plot1 <- ggplot(female, aes(y=Pronotum_Width_Female,x=Year_Female)) + 
  geom_point(size = 2, shape = 1) + 
  labs(x="Year", y = "Pronotum Width (mm)") + 
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        panel.background = element_blank(), axis.line = element_line(colour = "black")) +
  theme(axis.title = element_text(size=15), # for axix
        title = element_text(size=15),axis.text = element_text(size=15),
        axis.title.x = element_text(vjust = 0),
        axis.title.y = element_text(vjust = 2), 
        legend.title = element_text(vjust = 0.5))+
  coord_cartesian(ylim=c(5,12))


plot2 <- ggplot(male, aes(y=Pronotum_Width_Male,x=Year_Male)) + 
  geom_point(size = 2) + 
  geom_smooth(method = "lm", se = TRUE,col="black",size=1) +
  labs(x="Year", y = "Pronotum Width (mm)") + 
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        panel.background = element_blank(), axis.line = element_line(colour = "black")) +
  theme(axis.title = element_text(size=15), # for axix
        title = element_text(size=15),axis.text = element_text(size=15),
        axis.title.x = element_text(vjust = 0),
        axis.title.y = element_text(vjust = 2), 
        legend.title = element_text(vjust = 0.5))+
  coord_cartesian(ylim=c(5,12))

ggarrange(plot2, plot1,
          labels = c("a)", "b)"),
          ncol = 2, nrow = 1)

1 个答案:

答案 0 :(得分:0)

不确定您要实现的目标,但我认为最简单的方法是将数据绑定在一起,按性别绘制一个图和一个面,这将为面板提供漂亮的标签:

Pronotum_Width_Female <- c("6.5", "7.4", "7.0","6.2", "6.3", "6.3","6.0", "6.4", "6.9","6.6", "6.8", "7.2")
Year_Female <- c("1995", "1999", "2001","2003", "2005", "2007","2008", "2009", "2010","2011", "2012", "2013")
Female <- data.frame(Pronotum_Width = Pronotum_Width_Female, Year = Year_Female)

Pronotum_Width_Male <- c("6.4", "5.9", "5.8","6.2", "6.5", "6.0","6.2", "5.7", "5.8","6.0", "6.1", "6.5")
Year_Male <- c("1995", "1999", "2001","2003", "2005", "2007","2008", "2009", "2010","2011", "2012", "2013")
Male <- data.frame(Pronotum_Width = Pronotum_Width_Male, Year = Year_Male)

library(ggplot2)
library(dplyr)

d <- dplyr::bind_rows(list(Female = Female, Male = Male), .id = "gender") %>% 
  # Make Pronotum_Width numeric
  mutate(Pronotum_Width = as.numeric(Pronotum_Width))

ggplot(d, aes(y=Pronotum_Width, x = Year)) + 
  geom_point(aes(shape = gender), size = 2) + 
  scale_shape_manual(values = c(Female = 1, Male = 16)) +
  labs(x="Year", y = "Pronotum Width (mm)") + 
  theme(panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(),
        panel.background = element_rect(fill = NA), 
        axis.line = element_line(colour = "black")) +
  theme(axis.title = element_text(size=15), # for axix
        title = element_text(size=15),
        axis.text = element_text(size=15),
        axis.title.x = element_text(vjust = 0),
        axis.title.y = element_text(vjust = 2), 
        legend.title = element_text(vjust = 0.5),
        strip.background.x = element_rect(fill = NA)) +
  coord_cartesian(ylim = c(5, 12)) +
  facet_wrap(~gender) +
  # Drop the legend
  guides(shape = FALSE)