2015-01-20 99 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