我非常感谢您对以下问题的帮助。我知道将单个绘图保存到文件的几种方法。我的问题是:如何正确地将多色保存到文件中?
首先,我不是一位经验丰富的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()),而不是完整的多时隙。
到目前为止我尝试过:
使用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是我试图找到解决方案的原因。任何人都可以解释我做错了什么,也许可以提出解决问题的方法吗?
答案 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)
答案 2 :(得分:6)
为了完整起见,ggsave
不起作用,因为它只保存最后打印的ggplot对象,在你的情况下它只是最后一个情节。这是因为多色绘图通过将ggplot对象绘制到整个图形设备的不同子集上来创建绘图。另一种方法是通过将ggplot对象组合成一个大的ggplot对象,然后打印该对象来创建绘图。这与ggsave
兼容。此方法由arrangeGrob
包中的gridExtra
实施。