Создание столбца фрейма данных из ggplot
объектов немного необычно и громоздко, но может сработать, если это подходит для ситуации.(Казалось, что geom_bar
на самом деле не имеет смысла для этих данных, поэтому я переключился на гистограммы на отфильтрованном подмножестве углеводов).
С помощью вашего метода вы создаете столбец графиков, сохраняете фрейм данных в переменную, затем map2
по списку-столбцу графиков и вектору carb
с, добавляя заголовок к каждомусюжет.Затем вы можете распечатать любой элемент из полученного списка или распечатать их все с помощью map
или walk
.
library(tidyverse)
df <- mtcars %>%
filter(carb %in% c(1, 2, 4)) %>%
mutate(carb = as.character(carb))
df_with_plots <- df %>%
group_by(carb) %>%
nest() %>%
mutate(plot = map(data, function(.x) {
.x %>%
ggplot() +
geom_histogram(aes(mpg))
}))
plots1 <- map2(df_with_plots$plot, df_with_plots$carb, ~(.x + labs(title = .y)))
# plots1[[1]] # would print out first plot in the list
walk(plots1, print)
Удалены дополнительные графики дляРади краткости
Другой вариант, который кажется более простым, состоит в том, чтобы разбить фрейм данных на список фреймов данных, а затем создать графики для каждого из них.
Несколько преимуществ: вызов split
дает каждому значению carb
в качестве имени соответствующего элемента списка, к которому вы можете легко получить доступ с помощью imap
, и который переносится в список plots2
(см. ниже, как я напечатал сюжет по имени).Вы также можете сделать это за один шаг.Мне также трудно работать с вложенными данными, потому что я предпочел бы видеть кадры данных, что можно сделать, распечатав разделенный список фреймов данных.
plots2 <- df %>%
split(.$carb) %>%
imap(function(carb_df, carb) {
ggplot(carb_df) +
geom_histogram(aes(mpg)) +
labs(title = carb)
})
plots2[["4"]]
Как и в первом методе, вы можете распечатать все графики с помощью walk(plots2, print)
.