【问题标题】:Create R plot containing multiple panels where each panel is saved as .png/.pdf创建包含多个面板的 R 图,其中每个面板保存为 .png/.pdf
【发布时间】:2013-01-14 01:06:44
【问题描述】:

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

【问题讨论】:

  • 如果您仍有用于生成原始图的代码,您最好在 R 中制作一个包含多个面板的图并将整个内容保存为 png。请参阅:statmethods.net/advgraphs/layout.html 了解有关组合图的一些信息。

标签: r plot


【解决方案1】:

通过创建每个图,将它们布置在一起然后将它们保存为一个文件,从源头上解决问题不是更容易吗?据我所知,grid 布局函数应该与基本 plot 函数一起使用。这是一个使用ggplot2 的简单示例。如果您使用ggplot,您也许还可以使用构面函数。代码跟在图片后面。

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()

【讨论】:

    【解决方案2】:

    “grImport”包具有读取 pdf 文件、转换为 RGML 并导入以在网格图形框架中使用的功能。

    “png”包有一个readPNG 函数。

    正如 thelatemail 所建议的,如果您同时拥有创建这些图的数据和代码,您可能需要查看 layout 函数或使用带有参数 mfrow、mfcol 或 mfg 的 par

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      • 2012-05-15
      • 2020-02-17
      • 2020-10-12
      • 2014-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多