2015-04-23 77 views
4

我有一個圖像,我只想繪製100 * 100的正方形,左手底角在0,0。 當我使用下面的命令。爲什麼我的裁剪圖像周圍有空白區域? 我該如何避免它,並確保我得到確切的100 * 100圖像?R柵格在繪圖時避免出現空白

如果要重複我的例子,可以使用在第1行的任何圖像(其中,該圖像是大於100×100像素)

r <- raster("C:/Users/nnnn/Desktop/geo.jpg") 
vector= getValues(r) 
plot(r) 
r 


par(mar=c(0,0,0,0)) 
par(oma=c(0,0,0,0)) 
par(mai=c(0,0,0,0)) 
par(omi=c(0,0,0,0)) 
plot(r,xlim=c(0,100),ylim=c(0,100),legend=FALSE,axes=FALSE) 

enter image description here

+2

您想要圖像保持其縱橫比(即:仍然是一個正方形),即使您調整它的繪製窗口的大小?或者你問如何將它繪製到另一個非交互式設備(例如'pdf','png','bmp'等) –

+0

我想將它保存爲一個正方形(裁剪大小)作爲PNG文件 – user2543622

+0

@ JoshO'Brien是否可以提供有關如何更改mar,mai,oma,omi選項的建議,以便當我將裁剪後的圖像保存爲png時,我不會獲得任何白色邊距? – user2543622

回答

0

縱橫比通常保持爲地圖。繪製文件時可以使用寬度/高度。可以手動調整的標準設備,但你也可以這樣做:

library(raster) 
r <- raster(nrow=240, ncol=320) 
values(r) <- 1:ncell(r) 
dev.new(height=0.91*nrow(r)/50, width=1.09*ncol(r)/50) 
plot(r, legend=FALSE) 
+0

是否可以修改/建議對原始問題中的代碼進行更改?我想裁剪圖像 – user2543622

+0

我試過你的解決方案。它根本不起作用:( – user2543622

+0

嗯,它可以很好地工作,我會說,我做了一些小的調整,請注意,高度和寬度都是英寸,設備大小與繪製的柵格不完全成比例,因此一些經驗性調整 – RobertH

1

這是我最好的拍攝:

library(raster) 

## An example raster 
logo <- raster(system.file("external/rlogo.grd", package="raster")) 

## Clip out the lower-left 50*100 pixel rectangle as a new raster 'r' 
cropWithRowCol <- function(r, rows, cols) { 
    cc <- cellFromRowColCombine(r, rownr=rows, colnr=cols) 
    crop(r, rasterFromCells(r, cc, values=FALSE)) 
} 
r <- cropWithRowCol(logo, nrow(logo) - 49:0, 1:100) 


## Extract multipliers used to appropriately size the selected device 
w <- ncol(r)/max(dim(r)) 
h <- nrow(r)/max(dim(r)) 

## Set up appropriately sized device with no borders and required coordinate system  
## png("eg.png", width=480*w, height=480*h) 
dev.new(width=5*w, height=5*h) 
plot.new() 
par(mar=c(0,0,0,0), oma=c(0,0,0,0)) 
plot.window(xlim=extent(r)[1:2], ylim=extent(r)[3:4], xaxs="i",yaxs="i") 

## Finally, plot the (sub-)raster to it 
plot(r, axes=FALSE, legend=FALSE, add=TRUE) 
## dev.off() 

(請記住,在交互可調整大小的設備,改變設備的規模將弄亂地圖繪製的長寬比)

enter image description here

+0

是否可以建議我在原始問題中對代碼進行更改? – user2543622

+0

我如何選擇乘數w和h在我的情況? – user2543622

+0

使用我提供的代碼(即'w < - ncol(r)/ max(dim(r))'等)在您自己的柵格'r'上選擇它們。或者我誤解了你的問題? –

0

更改縱橫比:

plot(r, asp=1) 
相關問題