2011-05-12 38 views
6

當調整繪圖窗口大小時,我注意到了一些奇怪的行爲。考慮將點與點柵格進行繪圖

library(sp) 
library(rgeos) 
library(raster) 
rst.test <- raster(nrows=300, ncols=300, xmn=-150, xmx=150, ymn=-150, ymx=150, crs="NA") 
sap.krog300 <- SpatialPoints(coordinates(matrix(c(0,0), ncol = 2))) 
sap.krog300 <- gBuffer(spgeom = sap.krog300, width = 100, quadsegs = 20) 
shrunk <- gBuffer(spgeom = sap.krog300, width = -30) 
shrunk <- rasterize(x = shrunk, y = rst.test) 
shrunk.coords <- xyFromCell(object = rst.test, cell = which(shrunk[] == 1)) 
plot(shrunk) 
points(shrunk.coords, pch = "+") 

如果調整窗口大小,繪製的點與底層柵格相比會有不同的程度。如果您重新調整窗口大小並再次繪製shrunkshrunk.coords,則情節變得良好。任何人都可以解釋嗎?

回答

4

如果直接使用RasterLayer方法繪圖,繪圖調整大小問題不會發生。

## gives an error, but still plots 
raster:::.imageplot(shrunk) 
points(shrunk.coords, pch = ".") 

所以它必須有一些在原劇情的呼叫被稱爲.imageplot方法之前。

showMethods("plot", classes = "RasterLayer", includeDefs = TRUE) 

如果我們直接調用raster:::.plotraster它確實發生了,這是調用raster:::.imageplot功能:

raster:::.plotraster(shrunk, col = rev(terrain.colors(255)), maxpixels = 5e+05) 
points(shrunk.coords, pch = ".") 

它實際上是在軸標籤,而不是圖像本身。看到這個,這個情節忠實於調整大小:

raster:::.imageplot(shrunk) 
abline(h = c(-80, 80), v = c(-80, 80)) 

但像這樣做,和線調整大小後處於[-80,80]不再:

plot(shrunk) 
abline(h = c(-80, 80), v = c(-80, 80)) 

所以它實際上是在光柵顯示不正確之後繪製的點:繪圖方法保持縱橫比固定,因此拓寬繪圖不會將光柵圓圈「拉伸」爲橢圓。但是,它對之後添加的點做了一些處理,所以par()的調用一定不能正確處理(可能在raster:::.imageplot)。

看到這個問題的另一種方式是表明軸()不知道的空間正在使用的情節,這是你看到overplotting當同樣的問題:

plot(shrunk) 
axis(1, pos = 1) 

當調整X軸的長度不再同步。

-1

因爲您有柵格,請嘗試用圖像()替換plot()。我有同樣的問題,但這爲我解決了。