tidyverse: несколько графиков для каждого уровня фактора или каждого значения числовой переменной.

Я хочу сделать несколько графиков для каждого уровня фактора или каждого значения числовой переменной (здесь каждое значение переменной vs). Я не хочу использовать facet_grid или facet_wrap. Интересно, есть ли более компактный способ выполнить задачу. В моих фактических данных у меня есть много уровней фактора.

library(tidyverse)

mtcars %>% 
  dplyr::filter(vs == 0) %>% 
  ggplot(mapping = aes(x = wt, y = mpg)) +
  geom_point()


mtcars %>% 
  dplyr::filter(vs == 1) %>% 
  ggplot(mapping = aes(x = wt, y = mpg)) +
  geom_point()

person MYaseen208    schedule 20.05.2019    source источник


Ответы (2)


Может так делать?


plot_list <- map(.x = unique(mtcars$vs), ~ mtcars %>% 
              dplyr::filter(vs == .x) %>% 
              ggplot(mapping = aes(x = wt, y = mpg)) +
              geom_point() +
              ggtitle(.x))

plot_list[[1]]

person Humpelstielzchen    schedule 20.05.2019
comment
Спасибо @Humpelsielzchen за ваш ответ. Ваш код выдает следующую ошибку: Error in if (length(ans) == 0L || as.character(ans[[1L]])[1L] == "~") { : missing value where TRUE/FALSE needed. Любые мысли, пожалуйста. - person MYaseen208; 20.05.2019
comment
Вы получаете ошибку в наборе данных mtcars или в своих данных? - person Humpelstielzchen; 20.05.2019
comment
Работает нормально после перезапуска сеанса R. Спасибо - person MYaseen208; 20.05.2019
comment
Всегда рад помочь - person Humpelstielzchen; 20.05.2019
comment
Было бы неплохо, если бы вы указали, как поставить заголовок, отражающий значение vs. Спасибо - person MYaseen208; 20.05.2019

Используйте group_by, nest, purrr::pwalk для обхода вложенного списка фреймов данных, передавая группирующую переменную и отфильтрованный фрейм данных пользовательской функции внутри вызова pwalk.

plot_vs <- function(vs, data){ 
g1<-
  data %>% 
  ggplot(mapping = aes(x = wt, y = mpg)) +
  geom_point()+
  ggtitle(!!vs)
print(g1)
}


mtcars %>% 
    group_by(vs) %>% 
    nest() %>% 
    purrr::pwalk(plot_vs)
person Kresten    schedule 20.05.2019