Подтвердить что ты не робот

R - сохранение мультиплекса в файл

ИД действительно ценю вашу помощь по следующей проблеме. Я знаю несколько способов сохранить один файл в файле. Мой вопрос: как правильно сохранить множитель в файл?

Для начала, я не опытный пользователь R. Я использую ggplot2 для создания своих сюжетов, и еще одна вещь, о которой я должен упомянуть, это то, что я использую графический интерфейс RStudio. Используя пример из R Cookbook, я могу создать несколько графиков в одном окне.

Я хотел бы сохранить этот так называемый мультиплекс в файл (желательно как jpeg), но как-то не могу этого сделать.

Im создает мультипликатор следующим образом:

##define multiplot function
    multiplot <- function(..., plotlist=NULL, cols) {
        require(grid)

        # Make a list from the ... arguments and plotlist
        plots <- c(list(...), plotlist)

        numPlots = length(plots)

        # Make the panel
        plotCols = cols                          # Number of columns of plots
        plotRows = ceiling(numPlots/plotCols) # Number of rows needed, calculated from # of cols

        # Set up the page
        grid.newpage()
        pushViewport(viewport(layout = grid.layout(plotRows, plotCols)))
        vplayout <- function(x, y)
            viewport(layout.pos.row = x, layout.pos.col = y)

        # Make each plot, in the correct location
        for (i in 1:numPlots) {
            curRow = ceiling(i/plotCols)
            curCol = (i-1) %% plotCols + 1
            print(plots[[i]], vp = vplayout(curRow, curCol ))
        }

    }

## define subplots (short example here, I specified some more aesthetics in my script)
plot1a <- qplot(variable1,variable2,data=Mydataframe1)
plot1b <- qplot(variable1,variable3,data=Mydataframe1)  
plot1c <- qplot(variable1,variable2,data=Mydataframe2)
plot1d <- qplot(variable1,variable3,data=Mydataframe2)  

## plot in one frame
Myplot <- multiplot(plot1a,plot1b,plot1c,plot1d, cols=2)

Это дает желаемый результат. Проблема возникает, когда я пытаюсь сохранить файл. Я могу сделать это вручную в RStudio (используя Export → Save plot как изображение), но я хотел бы запустить все в script. Мне удается сохранить только subplot1d (который является last_plot()), а не полный множитель.

Что Ive пробовал до сих пор:

  • Использование ggsave

    ggsave(filename = "D:/R/plots/Myplots.jpg")
    

    Это приводит к сохранению только подзаголовка 1d.

  • Использование jpeg(), print() и dev.off()

    jpeg(filename = "Myplot.jpg", pointsize =12, quality = 200, bg = "white", res = NA, restoreConsole = TRUE)
    print(Myplot)
    dev.off()
    

    Это приводит к полностью белым изображениям (только предположение, которое я предполагаю). print (Myplot) возвращает NULL.

Не уверен, что я делаю неправильно здесь. Мое непонимание R - причина, по которой я застреваю, пытаясь найти решение. Может ли кто-нибудь объяснить, что я делаю неправильно, и, возможно, предложить способ решить мои проблемы?

4b9b3361

Ответ 1

Потому что Myplot - это возвращаемое значение из вашей мультимножной функции, и оно ничего не возвращает (его задача заключается в печати графиков). Вам нужно вызвать мультиплекс с открытым устройством jpeg:

jpeg(filename = "Myplot.jpg", pointsize =12, quality = 200, bg = "white", res = NA, restoreConsole = TRUE)
multiplot(plot1a,plot1b,plot1c,plot1d, cols=2)
dev.off()

должен работать.

Ответ 2

Используя пример кода (R cookbook), он работает для меня

png("chickweight.png")
multiplot(p1, p2, p3, p4, cols=2)
dev.off()

enter image description here

Ответ 3

И для полноты, ggsave не работает, поскольку он сохраняет только последний напечатанный объект ggplot, который в вашем случае является всего лишь последним сюжетом. Это вызвано тем фактом, что множитель создает график, рисуя объекты ggplot на разные подмножества общего графического устройства. Альтернативой является создание графика путем объединения объектов ggplot в один большой объект ggplot, а затем для печати объекта. Это будет совместимо с ggsave. Этот подход реализуется arrangeGrob в пакете gridExtra.