繁体   English   中英

如何在 R 中 plot 几个 rgb 图像

[英]How to plot several rgb images in R

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

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

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

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

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

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

谢谢

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


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 )


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

这是另一种方法,使用来自 grDevices 的光栅 class 代替,这使得使用普通的 plot 控件(par etc)更容易:


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) )
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM