在单个显示器上绘制多个JPEG图像

9
我需要在单个组合显示(或画布?)中绘制和显示多个jpeg图像。例如,假设我有不同大小的图像{a,b,c,d} .jpg,并且我想将它们绘制在一个2x2网格上的一页纸上。最好还能为每个子图设置标题。
我已经彻底寻找了解决方案,但无法找到如何实现的方法,所以任何建议都会真正有帮助。我最好使用基于EBImage包的解决方案。

谢谢回答。真正的问题是处理图像数据,使用rimage包我得到了来自EBImage包的图像数据以更好地显示。当使用mfrow()参数组织图表时,尽管我已经尝试过很多oma和mar参数,但仍然会得到非常大的边距。 - user442446
3个回答

5
有两种方法可以使用基本图形函数来排列多个图形,分别是par(mfrow=c(rows,columns))(将rowscolumns替换为整数)和layout(mat),其中mat是像matrix(c(1,2,3,4))这样的矩阵。
有关更多信息,请参见?par?layout,特别是Quick-R: Combining Plots
然而,由于您的问题涉及图像,我不知道这是否对您有所帮助。如果没有,我很抱歉误解了您的问题。

5
为了补充Henrik的解决方案,使用par()函数的一种相当方便的方法是:
jpeg(filename="somefile.jpg")
op <- par(mfrow=c(2,2)
#plot the plots you want
par(op)
dev.off()

这种方式可以在运行代码后将参数恢复到旧状态。请注意,如果其中一个图形出现错误,则不适用此方法。

请注意,R始终以相同的顺序放置图形。使用mfrow按行填充网格。如果您在代码中使用mfcol而不是mfrow,则按列填充。

布局是完全不同的故事。在这里,您可以定义图形的放置顺序。因此,layout(matrix(1:4,nrow=2)par(mfcol=c(2,2))相同。但是layout(matrix(c(1,4,3,2),ncol=2))将第一个图形放在左上角,下一个图形放在右下角,第三个图形放在右上角,最后一个图形放在左下角。

每个图形都是完全独立的,因此您使用选项main指定的标题也会被打印出来。如果您想要更多的灵活性,应该看看lattice图形。


这与image函数不兼容,因为它会覆盖整个图形。 - Quantum7
@Quantum7 我尝试使用 image(),在我的情况下它完美地工作。 - Joris Meys
1
你说得完全正确。我正在使用Matrix包处理稀疏矩阵,但它似乎覆盖了image函数,忽略了mfrows参数。基本图像函数可以正常工作。 - Quantum7

1

如果您不想要一个常规网格中的图像(不同的大小可能会暗示这一点),那么您可以考虑使用TeachingDemos包中的subplot函数。帮助页面中的最后一个示例显示了如何将图像用作绘图字符,只需修改以使用不同的图像和大小/位置。

my.symbols使用的ms.image函数(同一包)是另一个可能性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接