【问题标题】:Arrange multiple (32) .png files in a grid在网格中排列多个 (32) .png 文件
【发布时间】:2014-10-11 04:27:53
【问题描述】:

过去一周我一直在努力研究基本的 R 编码,但似乎一无所获(自 2013 年以来就没有使用过 R,这不是一个很好的借口)。

我只想要一个由 32 个 .png 文件组成的 4x8 网格(我制作的地图),并且我想一次不加载一个图像文件 (http://www.statmethods.net/advgraphs/layout.html )。

所以我想我可以加载文件夹中的图像写作(如果我的信念是bs,请纠正我)

img <- list.files(path='c:/a',patt='compo[0-32].*',full.names=T)

然后我在想可能是par(mfrow=c())layoutgrid.arrange (writing png plots into a pdf file in R)、grid.raster (How to join efficiently multiple rgl plots into one single plot?) - 我已经阅读并相应地进行了实验导致任何有价值的事情..

后者我只使用了以下结果

这让我咯咯笑。 我真的不认为lattice 是要走的路。

任何帮助将不胜感激!

【问题讨论】:

  • 看起来你不应该为此使用 R。根据您的问题描述,我可能会使用 ImageMagick:superuser.com/a/290679
  • 您可以使用 raster 包将它们读取为砖块或堆栈,然后将它们 cbind/rbind 组合成一个大图像...

标签: r png grid-layout


【解决方案1】:

不确定您对加载所有图像文件有什么顾虑——您还能如何读取它们的数据来创建新图像?

ETA:要加载文件,我只需使用 png::readPNG 。收集图像的一种方法是(此处选择 12 张图像)

filenames<-dir(pattern='compo')
foo<-list()
for(j in 1:12) foo[[j]]<-readPNG(filenames[j]

如果您愿意加载它们并使用基本的plot 工具,那么layout 就是您想要的命令。例如,加载 12 张图片

layout(matrix(1:12,nr=4,byr=T))
for (j in 1:12) plot(foo[[j]])

【讨论】:

  • 嗨,我有一个类似的 Q here 但超过 500 张图片。当我在这里尝试您的答案时,它在漫长的等待后中断。你能帮忙吗?尝试使用 magickr 和 collage 图像包,但没有达到我需要的效果
  • @user5249203 我发现您不太可能通过尝试组合 500 张图像来生成任何有用的信息。可能如果您连续打开它们,将每个样本缩小到原始大小的 10%,您可以将它们用于马赛克,但仅此而已
【解决方案2】:

另一种方法是使用 readPNG 读取 PNG 图像,然后使用 grid 和 gridExtra:

library(png)
library(grid)
library(gridExtra)

plot1 <- readPNG('plot1.png')
plot2 <- readPNG('plot2.png')

grid.arrange(rasterGrob(plot1),rasterGrob(plot2),ncol=1)

替代方案:如果您想使用 ggsave 保存绘图,可以使用而不是 grid.arrange

tmp <- arrangeGrob(rasterGrob(plot1),rasterGrob(plot2),ncol=1)
ggsave('filename.png',tmp,width=12,height=5)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    • 2012-08-25
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多