Question

J'ai remarqué un comportement étrange lors du redimensionnement de la fenêtre de l'intrigue. Envisager

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

Si vous redimensionnez la fenêtre, les points tracés obtiennent une étendue différente par rapport au raster sous-jacent. Si vous redimensionnez la fenêtre et tracez shrunk et shrunk.coords Encore une fois, l'intrigue s'avère bien. Quelqu'un peut-il expliquer cela?

Était-ce utile?

La solution

Si vous tracez directement avec le RasterLayer Méthode pour tracer Le problème de redimensionnement ne se produit pas.

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

Il doit donc être quelque chose dans l'appel d'intrigue d'origine avant le .imageplot la méthode est appelée.

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

Cela se produit si nous appelons raster:::.plotraster directement, et c'est la fonction qui appelle raster:::.imageplot:

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

Il est en fait dans les étiquettes de l'axe, pas l'image elle-même. Voyez avec cela, ces complots fidèlement sur redimensionner:

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

Mais faites-le comme ça, et les lignes ne sont plus à [-80, 80] après le redimensionnement:

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

C'est donc en fait les points tracés après le raster qui montrent mal: la méthode du tracé maintient le rapport d'aspect fixe, donc l'élargissement de l'intrigue ne "étire" pas le cercle raster vers une ellipse. Mais, il fait quelque chose aux points qui sont ajoutés par la suite, donc les appels à par() ne doit pas être géré correctement (probablement dans raster:::.imageplot).

Une autre façon de voir le problème est de montrer qu'Axis () ne connaît pas l'espace utilisé par l'intrigue, qui est le même problème que vous voyez lors de la surplomb:

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

Lorsque vous redimensionnez la longueur de l'axe X, les deux axes ne sont plus synchronisés.

Autres conseils

Parce que vous avez un raster, essayez de remplacer l'intrigue () par image (). J'ai eu le même problème mais cela l'a résolu pour moi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top