我需要在单个组合显示(或画布?)中绘制和显示几个jpeg图像。例如,假设我有不同大小的图像{a,b,c,d} .jpg,我想在2x2网格中将它们绘制在一个页面上。能够为每个子图设置标题也是很好的。
我一直在寻找一个解决方案,但无法找到如何做到这一点,所以任何想法都会有所帮助。我最好使用基于EBImage包的解决方案。
答案 0 :(得分:4)
如何使用基本图形函数排列多个图表有两种方法,即par(mfrow=c(rows,columns))
(用整数替换rows
和columns
)和layout(mat)
其中mat
}是一个像matrix(c(1,2,3,4))
这样的矩阵
有关详细信息,请参阅?par
,?layout
,尤其是Quick-R: Combining Plots。
然而,由于您的问题是关于图像,我不知道它是否对您有所帮助。如果没有,我很抱歉误解了你的问题。
答案 1 :(得分:3)
要添加到Henriks解决方案,使用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
指定的标题。如果你想要有更多的灵活性,你应该看一下格子图。
答案 2 :(得分:1)
如果您不希望图像位于常规网格中(不同的大小可能意味着这一点),那么您可以考虑使用TeachingDemos包中的子图功能。帮助页面中的最后一个示例显示使用图像作为绘图字符,只需修改即可使用不同的图像和大小/位置。
与my.symbols一起使用的ms.image函数(相同的包)是另一种可能性。