Добавьте объект ggplot2 к списку графиков

Допустим, у меня есть список сюжетов plotlist и я хочу позвонить patchwork::wrap_plots(plotlist).

Я также хочу добавить еще один сюжет в начало списка.

Начнем со списка, состоящего из двух участков:

library(ggplot2)
library(patchwork)

cols <- c("mpg", "hp")

plot_col <- function(this_col) {
  ggplot(mtcars) +
    aes_string("wt", this_col) +
    geom_point()
}

plotlist <- lapply(cols, plot_col)

Это работает:

res <- wrap_plots(plotlist)

Но подождите, у меня есть еще один сюжет.

p <- plot_col("qsec")

Могу я подготовить новый сюжет p к plotlist?

Ни один из этих подходов не работает: c(), list(), purrr::prepend()

newlist <- c(p, plotlist)
res <- wrap_plots(newlist)
#> Error: Only know how to add ggplots and/or grobs
newlist <- list(p, plotlist)
res <- wrap_plots(newlist)
#> Error: Only know how to add ggplots and/or grobs
newlist <- purrr::prepend(plotlist, p)
res <- wrap_plots(newlist)
#> Error: Only know how to add ggplots and/or grobs

1 ответ

  1. Использовать c()функция с двумя списками (спасибо Axeman):
newlist <- c(list(p), plotlist)
res <- wrap_plots(newlist)
  1. Используйте одну из многих функций, предоставляемых пакетом rlist для управления списками:
# install.packages("rlist")
newlist <- rlist::list.prepend(plotlist, p)
res <- wrap_plots(newlist)
  1. Или создайте новый список с помощью цикла for:
newlist <- list()
newlist[[1]] <- p
for (i in seq_along(plotlist)) {
  newlist[[i + 1]] <- plotlist[[i]]
}
res <- wrap_plots(newlist)
Другие вопросы по тегам