#r #image #pixel #lattice #r-raster
Вопрос:
Итак, у меня есть 4 изображения в следующем формате
> dim(images)
[1] 4 32 32 3
Каждое изображение имеет размер 32×32 пикселя в формате 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
безуспешно попытался.
Должен ли я обратиться к решетке, ggplot? Я новичок в растровых объектах, поэтому не знаю, как подойти к проблеме.
Спасибо
Ответ №1:
использование растергроба и заимствование из пакета 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 )
обратите внимание, что с grid.arrange
помощью параметра from gridArrange вам необходимо использовать аргумент grobs при предоставлении списка, и вы не можете просто использовать первый позиционный аргумент.
Вот дополнительный подход, вместо этого использующий класс растра из grDevices, который упрощает использование с обычными элементами управления построением (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) )
}
Комментарии:
1. Это хорошо работает, спасибо! Однако можно ли настроить так, чтобы вертикальное пространство совпадало с горизонтальным пространством между изображениями? И можно ли добавлять заголовки для каждого изображения?
2. Я добавил другое решение, используя
as.raster()
иplot()
вместо этого, просто казалось, что с ним легче работать.