Подтвердить что ты не робот

Применять функцию ggplot для каждой группы с помощью dplyr и задавать заголовок для каждой группы

Я хотел бы создать один отдельный график для каждой группы в кадре данных и включить группу в заголовок.

С набором данных диафрагмы я могу в базе R и ggplot сделать это

plots1 <- lapply(split(iris, iris$Species), 
  function(x) 
    ggplot(x, aes(x=Petal.Width, y=Petal.Length)) +
      geom_point() +
      ggtitle(x$Species[1]))

Существует ли эквивалент, использующий dplyr?

Здесь используется попытка использования граней вместо названия.

p <- ggplot(data=iris, aes(x=Petal.Width, y=Petal.Length)) + geom_point()
plots2 = iris %>% group_by(Species) %>% do(plots = p %+% . + facet_wrap(~Species))

где я использую% +%, чтобы заменить набор данных в p подмножеством для каждого вызова.

Workaround with facets

или (рабочий, но сложный) с ggtitle

plots3 = iris %>%
  group_by(Species) %>%
  do(
    plots = ggplot(data=.) +
      geom_point(aes(x=Petal.Width, y=Petal.Length)) +
      ggtitle(. %>% select(Species) %>% mutate(Species=as.character(Species)) %>% head(1) %>% as.character()))

Working example

Проблема заключается в том, что я не могу установить заголовок для каждой группы с ggtitle очень простым способом.

Спасибо!

4b9b3361

Ответ 1

Используйте .$Species, чтобы вывести данные о видах в ggtitle:

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

Ответ 2

Это еще один вариант, используя rowwise:

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