绘制多个栅格图像时填满空白

时间:2018-11-24 21:11:08

标签: r image plot raster

如何在保持图像高宽比的同时最小化下一张图像中的空白空间?

enter image description here

我指定了mar=c(0,0,1,0)页边距,但图像仍然间隔开。左侧,中央,底部和右侧都有额外的间距。我希望图像以网格排列,并且它们之间的间距很小。

这是我到目前为止所拥有的:

library(EBImage)
library(png)

pngs<-lapply(seq(1:4), function(x) {
   readPNG(system.file("images", "sample-color.png", package="EBImage"))
})

par(mfrow=c(2,2), mar=c(0, 0, 1, 0))
invisible(sapply(seq_along(pngs), function(i) {
  plot.new()
  plot.window(xlim=c(0, 1), ylim=c(0, 1), asp=1)
  rasterImage(pngs[[i]], 0, 0, 1, 1)
  title(paste0(letters[i], '. Image ', i), font.main=2)
}))

2 个答案:

答案 0 :(得分:1)

由于512:768的图像在您的示例中保留了1:1的原始宽高比。相反,您的默认绘图设备的宽高比似乎接近asp=NA。这不能很好地匹配并导致空格。

两种解决方案:

  1. 设置width可以使图像变形,从而使它们占据设备的整个空间。
  2. 通过设置height的{​​{1}}和dev.new()参数来调整绘图设备的尺寸。例如:

    library(EBImage)
    library(png)
    png <- readPNG(system.file("images", "sample-color.png", package="EBImage"))
    dev.new(width=4.5, height=8)
    par(mfrow=c(2,2), mar=c(0, 0, 1, 0))
    for(i in seq_len(4)){
        plot.new()
        plot.window(xlim=c(0, 1), ylim=c(0, 1), asp=1)
        rasterImage(png, 0, 0, 1, 1)
        title(paste0("Image ", i))
    }
    

答案 1 :(得分:1)

如果for idx, d in g: print(d['C'].iat[0]) print(d['C'].iloc[0], '\n') alpha alpha charlie charlie 软件包的其他功能不是必需的,则这是另一个利用png的解决方案。 EBImage保持长宽比,除非故意对图像进行了变换。

此解决方案需要更多的工作来放置带有EBImage的地标标签,但是增加的成本可能会因具有更大的灵活性而被抵消。

text()