Как сохранить или построить график из списков

Я назвал списки сущностей (объектов, списков, гробов?) Из qplot или ggplot, которые визуализируются или сохраняются сами по себе, но я не могу понять, как передать их как список или вектор для упорядочивания. Я считаю, что моя проблема связана с извлечением объектов списка в целом, а не с ggplot2.

library(ggplot2)
library(grid)
library(gridExtra)

# Generate a named list of ggplots
plotlist <- list()
for(a in c(1:4)) {
    for(b in c(1:4)) {
        plotlist[[paste0("Z",a,b)]] <-
            qplot(rnorm(40,a,b),
                  geom="histogram",
                  xlab=paste0("Z",a,b))
    }
}

# Arrange and display them
# The following two lines work fine, so the plots are in there:
plotlist[["Z12"]]
ggsave(plot=plotlist[["Z12"]], filename="deletable.png")

# The following two lines complain about not being 'grobs'
grid.arrange(plotlist, widths=c(1,1), ncol=2)
grid.arrange(unlist(plotlist), widths=c(1,1), ncol=2)

Могу ли я каким-то образом преобразовать их как гробов, не называя их явно, или найти альтернативу исключению из списка, которая позволяет гробу уйти?


person mightypile    schedule 15.06.2017    source источник
comment
Можете ли вы включить воспроизводимый пример?   -  person RobertMyles    schedule 15.06.2017
comment
@RobertMc В моем исходном посте уже есть воспроизводимый пример, который следует рекомендациям Джориса и работает посредством копирования и вставки в консоль, за исключением операторов library (). Я их добавлю.   -  person mightypile    schedule 15.06.2017


Ответы (1)


Используйте lapply(plotlist, ggplot2::ggplotGrob), чтобы сгенерировать список гробов ggplot2. Затем этот список grobs можно передать gridExtra::grid.arrange.

Например:

library(ggplot2)
library(gridExtra)

plotlist <- list()

for(a in c(1:4)) {
    for(b in c(1:4)) {
        plotlist[[paste0("Z",a,b)]] <-
            qplot(rnorm(40,a,b),
                  geom="histogram",
                  xlab=paste0("Z",a,b))
    }
}

grid.arrange(grobs = lapply(plotlist, ggplotGrob), widths = c(1, 1), ncol = 2)

введите описание изображения здесь

person Peter    schedule 15.06.2017
comment
При тестировании этого предложения я обнаружил, что простое использование grobs = plotlist, а не plotlist, устраняет ошибку. grobs = lapply (plotlist, ggplotGrob) еще более явный и отлично работает. Спасибо! - person mightypile; 15.06.2017