【问题标题】:Plotting several jpeg images in a single display在单个显示器中绘制多个 jpeg 图像
【发布时间】:2010-09-08 13:16:58
【问题描述】:

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

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

【问题讨论】:

  • 感谢您的回答。真正的问题是处理图像数据,使用 rimage 包我从 EBImage 包中获取图像数据以更好地显示。在使用 mfrow() 参数组织绘图时,我仍然获得非常大的边距,尽管我已经使用 oma 和 mar 参数玩了很多。

标签: image r plot


【解决方案1】:

有两种方法可以使用基本图函数排列多个图,即par(mfrow=c(rows,columns))(用整数替换rowscolumns)和layout(mat),其中mat 是类似matrix(c(1,2,3,4)) 的矩阵。 如需更多信息,请参阅?par?layout,尤其是Quick-R: Combining Plots

但是,由于您的问题是关于图像的,我不知道它是否对您有帮助。如果不是,我很抱歉误解了您的问题。

【讨论】:

    【解决方案2】:

    要添加到 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 指定的标题也会被打印出来。如果你想有更多的灵活性,你应该看看格子图。

    【讨论】:

    • 这不适用于image 函数,它会覆盖整个数字。
    • @Quantum7 我用image() 试过了,在我的情况下效果很好。
    • 你说得对。我将 Matrix 包用于稀疏矩阵,它显然以忽略 mfrows 的方式覆盖了图像函数。基本图像工作正常。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-06
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      • 2012-11-27
      • 1970-01-01
      • 2014-03-06
      相关资源
      最近更新 更多