Подтвердить что ты не робот

Растровый растровый пакет R - растровая печать без фона, границы и легенды

Я использую растровую функцию, как показано на строках ниже. Моя последняя строка производит некоторый вывод. Этот вывод имеет строку, которая говорит dimensions : 240, 320, 76800 (nrow, ncol, ncell). Я бы хотел перепечатать этот образ, но сказать только первые 200 строк и первые 300 столбцов. Как я могу это сделать? Вторая последняя строка ниже отображает все изображение

f <- "pictures/image1-1421787394.jpeg"
f
r <- raster(f)
plot(r);
r

============================= update1

Я сделал png(filename = '~/x.png');par(mar=rep(0, 4), xpd = TRUE, oma=rep(0, 4),bty='n') ; plot(r,xlim=c(0,200),ylim=c(0,200),legend=FALSE,axes=FALSE); dev.off(), чтобы сохранить обрезанное изображение. Я смог избавиться от легенды и топоров и черного ящика. Но проблема в том, что сохраненное изображение содержит гораздо больше, чем обрезанная часть - например, белая часть вокруг изображения. Я хочу сохранить только обрезанную часть оригинала (сохранить размер изображения 200 * 200 пикселей). Пожалуйста, дайте мне знать, как это сделать?

Кроме того, как я могу добавить красный квадрат, соответствующий вышеуказанной обрезанной части, к исходному изображению? Я имею в виду, что я хотел бы получить красный квадрат (только края) в верхней части исходного изображения, а затем сохранить это (исходное изображение + квадрат) в качестве нового изображения.

Как я могу это сделать?

Update2 ++++++++++++++++++++++++++++++++++++++++++++++++

добавление повторяемого примера, чтобы показать, что я имею в виду на белом фоне

последняя строка ниже отображает обрезанное изображение. Я хочу, чтобы это изображение было 100 * 100, так как мои xlim и ylim равны 100. Но я вижу белый фон, как показано в примере ниже. (вы не можете видеть фон, но если вы запустите код на своей машине и откройте изображение, вы увидите его)

library(raster)
r <- raster(nrow=240, ncol=320)
values(r) <- 1:ncell(r)
plot(r)
plot(r,xlim=c(0,100),ylim=c(0,100),legend=FALSE,axes=FALSE,frame.plot=F)

enter image description here

4b9b3361

Ответ 1

Вы можете сделать это, установив xlim и ylim:

plot(r,xlim=c(0,299),ylim=c(0,199))

[ ОБНОВЛЕНИЕ] Чтобы избавиться от белого фона, вы можете попробовать параметр useRaster=F:

plot(r,xlim=c(0,100),ylim=c(0,100),legend=FALSE,axes=FALSE,frame.plot=F,useRaster=F)

Ответ 2

Если вы хорошо понимаете свой вопрос, у вас есть RasterLayer r с dim (r) c (240, 320, 1), и вы хотите обрезать его до первых 200 строк и 300 столбцов, а затем построить без пробела.

Всегда предоставлять данные примера. В этом случае это легко сделать.

library(raster)
r <- raster(nrow=240, ncol=320)
values(r) <- 1:ncell(r)

Существуют разные способы обрезания строк/столбцов. Например, вы можете создать объект степени и использовать его.

e <- extent(r, 1, 200, 1, 300)
rc <- crop(r, e)

Другой способ (для растров меньшего размера) - использовать индексирование и падение = FALSE

rc <- r[1:200, 1:300, drop=FALSE]

Чтобы создать карту, вы можете использовать "plot" или "image". Возможно, изображение больше по душе (меньше белого пространства, но нет легенды)

image(rc)  

с графиком вы можете установить размер устройства перед построением графика.

dev.new(height=nrow(r), width=ncol(r))
plot(rc, legend=FALSE)

Вы также можете отобразить файл, например png, чтобы избежать пробелов; в зависимости от того, как вы устанавливаете свои 'par'ameters, такие как mai

png('test.png', width=450, height=275)
plot(rc)
dev.off()

Другие способы борьбы с этим включают использование spplot или levelplot в пакете rasterVis

spplot(rc)
library(rasterVis)
levelplot(rc)

Чтобы получить красный прямоугольник на исходном изображении

plot(r)
plot(e, add=TRUE, col='red', lwd=2)