2015-01-20 33 views
11

我正在使用栅格函数,如下面的行所示。我的最后一行产生一些输出。该输出有一行说dimensions : 240, 320, 76800 (nrow, ncol, ncell)。我想重印那张图片,但只说前200行和前300列。我怎样才能做到这一点?下面的第二个最后一行绘制整个图像图像光栅R包 - 没有背景和边框和图例的光栅打印

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

回答

5

您可以通过设置xlimylim做到这一点:

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

[UPDATE] 为了摆脱白色背景的,你可以尝试useRaster=F参数:

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

有没有什么办法可以保存新的图像(裁剪)? – user2543622 2015-01-20 22:10:15

+0

当然 - 做'png(文件名='〜/ x.png');情节(R,XLIM = C(0200),ylim = C(0200)); dev.off()'。您还可以使用其他命令(例如'pdf()'或'jpeg()'来生成不同格式的图像。 – 2015-01-20 22:22:06

+0

还有一个问题:我打算使用getValues()函数获取值。 getValues(r)正常工作。但我想只为裁剪图像获取值。如何使用getValues函数与xlim和ylim参数结合使用? – user2543622 2015-01-21 21:19:27

4

如果很好地理解你的问题,你有一个带dim(r)c(240,320,1)的RasterLayer r,你想把它裁剪到前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] 

为了使地图,你可以使用“阴谋”或“图像”。也许,图像更自己的喜好(更少的空白区域,但没有传说)

image(rc) 

与阴谋,你可以绘制之前设置该设备的大小。

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

你也可以绘制到像png这样的文件来避免空白;这取决于你如何设置你的“par'ameters如麦

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) 
+0

当我使用png命令时我应该设置参数来避免任何背景?在你的示例裁剪图像将是200 * 300(按照范围命令),然后在PNG命令为什么你有宽度= 450,高度= 275? – user2543622 2015-04-23 04:10:21

+0

也当我绘制我的原始图像左下角是0,0。但是,当我绘制扩展为什么它显示为图像顶部的单杠?它不应该是垂直酒吧位于图像的最左部分? – user2543622 2015-04-23 04:13:21

+0

我不知道你的意思是“避免任何背景”。我改变宽度/高度以适应图例。我不知道你是什么意思的水平和垂直酒吧(我没有看到)。 – RobertH 2015-04-23 04:38:27