问题描述
所以我有以下格式的 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) )
}