【问题标题】:Reading in multiple png files in order to create a new plot with grid.arrange读取多个 png 文件以使用 grid.arrange 创建新图
【发布时间】:2016-07-26 19:31:56
【问题描述】:

假设我刚刚在 ggplot2 中创建了 4 个直方图。完成后,我意识到我应该使用 grid.arrange 将一些绘图合并到一个图形设备中。 CRAN 中有 png 和 jpeg 包,它们都可以用来在绘图上叠加图形。除了重新运行可视化之外,R 中是否有包可以用来导入多个 png 文件,然后用来排列一个图形设备,每个图形设备都在上面?

这里有一些示例代码,虽然可视化都是一样的。

df = data.frame(one=c(1,3,5,6,7,3,4,5,2,5,3,1,2))
df

library(ggplot2)
p1 = qplot(one, data=df, geom="histogram")
p2 = qplot(one, data=df, geom="histogram")
p3 = qplot(one, data=df, geom="histogram")
p4 = qplot(one, data=df, geom="histogram")

png("my_viz1.png")
p1
dev.off()

png("my_viz2.png")
p2
dev.off()

png("my_viz3.png")
p3
dev.off()

png("my_viz4.png")
p4
dev.off()

【问题讨论】:

  • 未能使用 print(plot_obj) 是 R 用户困惑的常见原因。 (请务必阅读 R-FAQ 的其余部分,其中更详细地解释了原因。)我也没有看到需要什么样的输出的描述。 png 设备不会产生多个页面,但 pdf 设备会。

标签: r


【解决方案1】:
rl = lapply(sprintf("my_viz%i.png", 1:4), png::readPNG)
gl = lapply(rl, grid::rasterGrob)
gridExtra::grid.arrange(grobs=gl)

【讨论】:

    【解决方案2】:

    就我个人而言,我会竭尽全力避免重新导入保存的图形,并且如果可能的话,我会再次重新运行可视化,以便保证下次生成相同结果的代码。依赖外部文件不会被意外删除或修改总是有风险的。

    但是,有时您需要快速破解,如果您现在遇到这种情况,请尝试以下操作:

    library("png")
    library("raster")
    plot(0:2, 0:2, type = "n", xaxt = "n", yaxt = "n", xlab = "", ylab = "")
    rasterImage(readPNG(source="my_viz1.png"), 0, 1, 1, 2)
    rasterImage(readPNG(source="my_viz2.png"), 1, 1, 2, 2)
    rasterImage(readPNG(source="my_viz3.png"), 0, 0, 1, 1)
    rasterImage(readPNG(source="my_viz4.png"), 1, 0, 2, 1)
    

    【讨论】:

      猜你喜欢
      • 2017-10-17
      • 2017-08-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      • 2018-02-01
      • 2022-12-12
      • 2022-01-02
      • 2016-02-29
      相关资源
      最近更新 更多