创建包含多个面板的R图,其中每个面板保存为.png / .pdf

时间:2013-01-14 01:06:45

标签: r plot

我想创建一个包含plot()函数制作的四个子图的大图。 所有子图都保存为png / pdf文件格式。 在R中是否有方法将这些图导入R然后创建一个包含所有子图的大图?

2 个答案:

答案 0 :(得分:1)

'grImport'包具有读取pdf文件,转换为RGML然后导入以在网格图形框架内使用的功能。

'png'包有一个readPNG函数。

正如thelatemail建议你是否同时拥有创建这些图的数据和代码,你可能要么查看layout函数,要么使用par参数mfrow,mfcol,或者制造。

答案 1 :(得分:1)

通过创建每个绘图,将它们放在一起然后将它们保存为一个文件,在源头修复问题会不会更容易?据我所知,grid布局函数应该与基本plot函数一起使用。这是使用ggplot2的简单示例。如果您使用ggplot,也可以使用构面函数。代码在图像之后。

screenshot

library(ggplot2)
library(grid)

set.seed(23456)
mydf <- data.frame(mydate = seq(as.Date('2012-01-01'), as.Date('2012-12-01'), by = '1 month'),
                   run1 = runif(12, 100, 200),
                   run2 = runif(12, 300, 400),
                   run3 = runif(12, 1000, 2000),
                   run4 = runif(12, 2000, 3000))

p1 <- ggplot(data = mydf) +
         geom_line(aes(x = mydate, y = run1))

p2 <- ggplot(data = mydf) +
         geom_line(aes(x = mydate, y = run2))

p3 <- ggplot(data = mydf) +
         geom_line(aes(x = mydate, y = run3))

p4 <- ggplot(data = mydf) +
         geom_line(aes(x = mydate, y = run4))


png(filename = paste("multipleplot.png", sep = ""), width = 600, height = 600, units = "px", res = NA)
grid.newpage()
pushViewport(viewport(layout = grid.layout(2, 2, widths = c(300, 300))))

vplayout <- function(x, y)
    viewport(layout.pos.row = x, layout.pos.col = y)

print(p1, vp = vplayout(1,1))
print(p2, vp = vplayout(1,2))
print(p3, vp = vplayout(2,1))
print(p4, vp = vplayout(2,2))
dev.off()