2011-05-12 2 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).

문제를 보는 또 다른 방법은 overploting을 때 표시되는 동일한 문제가 음모에 의해 사용되는 그 축()의 공간을 모르는를 표시하는 것입니다

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

당신은 크기를 조정

X -axis length 두 축이 더 이상 동기화되지 않습니다.

-1

래스터가 있으므로 plot()을 image()로 대체 해보십시오. 나는 똑같은 문제를 가지고 있었지만 이것이 나를 위해 해결되었다.

관련 문제