读取多个png文件以使用grid.arrange创建新绘图

时间:2014-02-28 22:33:34

标签: r

假设我刚刚在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()

2 个答案:

答案 0 :(得分:9)

rl = lapply(sprintf("my_viz%i.png", 1:4), png::readPNG)
gl = lapply(rl, grid::rasterGrob)
gridExtra::grid.arrange(grobs=gl)

答案 1 :(得分:3)

就个人而言,我会花一些时间来避免重新导入已保存的图形,如果可能的话,我会再次重新运行可视化,以便保证下次生成相同结果的代码。依赖外部文件不会被意外删除或修改始终是一种风险。

然而,有时你需要一个非常快速的黑客,如果你现在的情况,请试试这个:

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)