Apply a ggplot-function per group with dplyr and set title per group

library(dplyr, warn.conflicts = FALSE)
library(ggplot2)

plots3 <- iris %>%
  group_by(Species) %>%
  group_map(~ ggplot(.) + aes(x=Petal.Width, y=Petal.Length) + geom_point() + ggtitle(.y[[1]]))

length(plots3)
#> [1] 3
# for example, the second plot :
plots3[[2]]

Created on 2021-11-19 by the reprex package (v2.0.1)


This is another option using rowwise:

plots2 = iris %>% 
    group_by(Species) %>% 
    do(plots = p %+% .) %>% 
    rowwise() %>%
    do(x=.$plots + ggtitle(.$Species))

Use .$Species to pull the species data into ggtitle:

iris %>% group_by(Species) %>% do(plots=ggplot(data=.) +
         aes(x=Petal.Width, y=Petal.Length) + geom_point() + ggtitle(unique(.$Species)))