R - 将多重绘图保存到文件

时间:2012-07-30 12:18:25

标签: r save ggplot2

我非常感谢您对以下问题的帮助。我知道将单个绘图保存到文件的几种方法。我的问题是:如何正确地将多色保存到文件中?

首先,我不是一位经验丰富的R用户。我使用ggplot2创建我的图,我应该提到的另一件事是我使用RStudio GUI。使用R Cookbook中的example,我可以在一个窗口中创建多个图。

我想将这个所谓的多重时隙保存到文件中(最好是jpeg),但不知道怎么做不到。

我正在创建如下的多重时隙:

##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 - &gt; Save plot as image),但我想在脚本中运行所有内容。我设法只保存subplot1d(即last_plot()),而不是完整的多时隙。

到目前为止我尝试过:

  1. 使用ggsave

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

    这导致仅保存子图1d。

  2. 使用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。

  3. 不确定我在这里做错了什么。我缺乏理解R是我试图找到解决方案的原因。任何人都可以解释我做错了什么,也许可以提出解决问题的方法吗?

3 个答案:

答案 0 :(得分:22)

因为Myplot是多值函数返回的值,它不返回任何内容(它的作用是打印图形)。您需要在打开jpeg设备的情况下调用multiplot:

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

应该有用。

答案 1 :(得分:17)

使用example code(R cookbook),它适用于我

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

enter image description here

答案 2 :(得分:6)

为了完整起见,ggsave不起作用,因为它只保存最后打印的ggplot对象,在你的情况下它只是最后一个情节。这是因为多色绘图通过将ggplot对象绘制到整个图形设备的不同子集上来创建绘图。另一种方法是通过将ggplot对象组合成一个大的ggplot对象,然后打印该对象来创建绘图。这与ggsave兼容。此方法由arrangeGrob包中的gridExtra实施。