Растровый растровый пакет 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]()
Ответы
Ответ 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)