2011-05-12 16 views
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

यदि आप साजिश के लिए 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 में)।

समस्या को देखने का एक और तरीका है साजिश है, जो एक ही समस्या आप देख जब overplotting है द्वारा इस्तेमाल किया जा रहा है कि() अक्ष अंतरिक्ष पता नहीं है दिखाने के लिए है:

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

जब आप आकार बदलने के एक्स -एक्सिस लंबाई दो अक्ष अब सिंक्रनाइज़ नहीं हैं।

-1

क्योंकि आपके पास रास्टर है, छवि() के साथ साजिश() को बदलने का प्रयास करें। मुझे एक ही समस्या थी लेकिन यह मेरे लिए हल हो गई।

संबंधित मुद्दे

 संबंधित मुद्दे