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