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

问题描述

所以我有以下格式的 4 张图像

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

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

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

如何在一个图中获得所有四个图像? par(mfrow=c(2,2)) 似乎不起作用,我搜索了论坛并尝试了 gridArrange 没有成功。

我应该转向格子吗,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,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],3] )
    dim(r) <- dim( images[1,1] )
    rasterGrob(r)
})

grid.arrange( grobs=rgb.images )


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

这是另一种方法,使用来自 grDevices 的光栅类,这样可以更轻松地与普通绘图控件(par 等)一起使用:


rgb.images2 <- lapply( 1:4,1] )
    as.raster(r)
})

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