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

2 回答 2

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)。

查看问题的另一种方法是显示axis() 不知道绘图使用的空间,这与您在重叠绘图时看到的问题相同:

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

当您调整 x 轴长度的大小时,两个轴不再同步。

于 2011-05-12T23:05:34.867 回答
0

因为你有一个光栅,所以尝试用 image() 替换 plot()。我有同样的问题,但这为我解决了。

于 2017-01-17T00:20:27.117 回答