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 = "+")

ウィンドウのサイズを変更すると、プロットされたポイントは、下にあるラスターとは異なる範囲になります。ウィンドウとプロットのサイズを変更すると、プロットはうまくshrunkいきますshrunk.coords。誰でもこれを説明できますか?

4

2 に答える 2

4

plot のメソッドを使用して直接プロットすると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 軸の長さを変更すると、2 つの軸は同期しなくなります。

于 2011-05-12T23:05:34.867 に答える