2010-09-08 42 views
7

我需要在单个组合显示(或画布?)中绘制并显示几个jpeg图像。例如,假设我有图像{a,b,c,d} .jpg,每个图像都有不同的大小,我想将它们绘制在2x2网格的一页上。能够为每个子区域设置标题也是很好的。在单个显示器中绘制几个jpeg图像

我一直在彻底寻找解决方案,但无法找到如何去做,所以任何想法都会有帮助。我最好使用基于EBImage包的解决方案。

+0

感谢您的答案。真正的问题是处理图像数据,使用rimage包,我从EBImage包中获取图像数据以更好地显示。在用mfrow()参数组织地块时,我仍然获得了非常大的利润,尽管我已经使用了oma和mar参数。 – user442446 2010-09-13 07:52:53

回答

4

有两种方法如何安排几个曲线与基本图功能,即par(mfrow=c(rows,columns))(替代rowscolumns与整数)和layout(mat)其中mat就像matrix(c(1,2,3,4))的矩阵。
欲了解更多信息,请参阅?par,?layout,特别是Quick-R: Combining Plots

但是,因为你的问题是关于图像,我不知道它是否对你有所帮助。如果没有,我很抱歉误解你的问题。

2

为了增加Henriks解决方案,使用了标准杆()函数的一个相当方便的方法:

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指定的标题。如果你想有更多的灵活性,你应该看看格子图。

+0

这不适用于'image'函数,它会覆盖整个图形。 – Quantum7 2015-05-20 13:57:55

+0

@Quantum7我用'image()'试了一下,在我的情况下效果很好。 – 2015-05-22 12:52:48

+1

你是对的。我正在使用矩阵包进行稀疏矩阵处理,这显然会以忽略mfrows的方式覆盖图像函数。基本图像正常工作。 – Quantum7 2015-05-28 09:48:47

1

如果你不想在一个规则的网格中的图像(不同的大小可能暗示这一点),那么你可以考虑使用TeachingDemos包中的子图功能。帮助页面中的最后一个示例显示使用图像作为绘图角色,只需修改以使用不同的图像和大小/位置即可。

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