Domanda

Ho notato un comportamento strano quando si ridimensionava la finestra della trama. Ritenere

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

Se si ridimensiona la finestra, i punti tracciati ottengono diverse estensioni rispetto al raster sottostante. Se ridimensiona la finestra e tracciano shrunk e shrunk.coords Ancora una volta, la trama va bene. Qualcuno può spiegarlo?

È stato utile?

Soluzione

Se pianifichi direttamente con il RasterLayer Metodo per tracciare il problema di ridimensionamento non si verifica.

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

Quindi deve essere qualcosa nella trama originale prima del .imageplot il metodo è chiamato.

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

Si verifica se chiamiamo raster:::.plotraster direttamente, e questa è la funzione che chiama raster:::.imageplot:

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

In realtà è nelle etichette dell'asse, non nell'immagine stessa. Vedi con questo, questo trama fedelmente sul ridimensionamento:

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

Ma fallo in questo modo, e le linee non sono più a [-80, 80] dopo il ridimensionamento:

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

Quindi in realtà sono i punti tracciati dopo il raster che mostrano in modo errato: il metodo della trama mantiene fissa le proporzioni, quindi allargare la trama non "allunga" il cerchio raster in un'ellisse. Ma fa qualcosa ai punti che vengono aggiunti in seguito, quindi le chiamate a par() non deve essere gestito correttamente (probabilmente in raster:::.imageplot).

Un altro modo di vedere il problema è mostrare che Axis () non conosce lo spazio utilizzato dalla trama, che è lo stesso problema che vedi durante il piolo in eccesso:

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

Quando si ridimensiona la lunghezza dell'asse X, i due assi non sono più sincronizzati.

Altri suggerimenti

Poiché hai un raster, prova a sostituire la trama () con immagine (). Ho avuto lo stesso problema, ma questo lo ha risolto per me.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top