2011-05-12 4 views
6

J'ai remarqué un comportement étrange lors du redimensionnement de la fenêtre de tracé. Considérezartefact de tracé avec points sur raster

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 se mesure par rapport à différents la trame sous-jacente. Si vous redimensionnez la fenêtre et tracez à nouveau shrunk et shrunk.coords, l'intrigue s'avère très bien. Quelqu'un peut-il expliquer cela?

Répondre

4

Si vous tracez directement avec la méthode RasterLayer pour le tracé, le problème de redimensionnement ne se produit pas.

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

Il doit être quelque chose dans l'appel de l'intrigue originale avant que la méthode .imageplot est appelée.

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

Il ne se produit si l'on appelle directement raster:::.plotraster, ce qui 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 d'axe, pas l'image elle-même. Voir avec cela, cette parcelles fidèlement Redimensionner:

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

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

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

Il est en fait les points tracés après le raster qui s'affichent incorrectement: la méthode de traçage conserve le rapport d'aspect fixe, de sorte que l'élargissement de l'intrigue n'élargit pas le cercle matriciel à une ellipse. Mais, il fait quelque chose pour les points qui sont ajoutés par la suite donc les appels à par() ne doivent pas être traités correctement (probablement dans raster:::.imageplot).

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

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

Lorsque vous redimensionnez x -axe de longueur les deux axes ne sont plus synchronisés.

-1

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

Questions connexes