如何在 R 中绘制多个 rgb 图像

How to plot several rgb images in R

所以我有4张格式如下的图片

> dim(images)
[1]  4 32 32  3

每张图像都是 32x32 像素的 rgb 格式,其中每个像素取 [0,1] 中的值。我可以一次绘制一张图像

images2 <- rgb(images[1,,,1],images[1,,,2],images[1,,,3])
dim(images2) <- dim(images[1,,,1])
grid.raster(images2, interpolate=F)

如何在一张图中获得所有四张图片? par(mfrow=c(2,2)) 好像不行,我已经在论坛上搜索并尝试 gridArrange 没有成功。

我应该转向 lattice,ggplot 吗?我是栅格对象的新手,所以我不知道如何解决这个问题。

谢谢

使用 rasterGrob 并从 gridExtra 包中借用应该可以解决问题:


library(gridExtra)

## Let's create some imgaes, for us who don't have your data:
if(!exists("images")) {
    random.rgb <- floor( runif( n=4*32*32*3, min=0, max=256 ) ) / 255
    images <- array( random.rgb, dim=c(4,32,32,3) )
}

## create a list of the rasters, note, have to use rasterGrob for this:

rgb.images <- lapply( 1:4, function(i) {
    r <- rgb( images[i,,,1], images[i,,,2], images[i,,,3] )
    dim(r) <- dim( images[1,,,1] )
    rasterGrob(r)
})

grid.arrange( grobs=rgb.images )


请注意,对于 gridArrange 中的 grid.arrange,您需要在提供列表时使用 grobs 参数,而不能简单地使用第一个位置参数。

这是一个额外的方法,使用来自 grDevices 的光栅 class,这使得它更容易与普通绘图控件(par 等)一起使用:


rgb.images2 <- lapply( 1:4, function(i) {
    r <- rgb( images[i,,,1], images[i,,,2], images[i,,,3] )
    dim(r) <- dim( images[1,,,1] )
    as.raster(r)
})

par(mfrow=c(2,2))
for( i in 1:4 ) {
    plot( rgb.images2[[i]] )
    title( paste("Figure",i) )
}