I have spatial data in R, let's say an object of formal class SpatialPointsDataFrame but the below problem is encountered with Raster too.
I can plot easily the data with spplot()
and save a .png file. If I want to create and store a function to recall this operation (since I have to repeat this many times in a simulation), spplot()
save an empty .pgn file UNLESS I use dev.off()
outside the function.
# example data
trees <- data.frame(x=runif(100, 1,100), y=runif(100, 1,100), value=runif(100, 20,60))
trees <- SpatialPointsDataFrame(trees[,c("x","y")], trees)
proj4string(trees) <- CRS("+proj=utm +zone=30 ellps=WGS84")
# simple plotting, it works
png(filename="spplot0.png", width = 480, height = 480, units = "px")
spplot(trees, "value")
dev.off()
# create functions
map1 <- function(){
png(filename="spplot1.png", width = 480, height = 480, units = "px")
spplot(trees, "value")
dev.off()
}
map2 <- function(){
png(filename="spplot2.png", width = 480, height = 480, units = "px")
spplot(trees, "value")
}
# carry out functions. plotmap1() save the correct graph, spplot() an empyempty oneimage.
map1()
map2();dev.off()
Why map1()
does not work and map2()+dev.off()
outside does?
I know there are alternative mapping options (plot, spplot, ggplot) but I wish to stick with spplot()
for this job. I have already found a work-around solution (see function map2) but it baffles me, my code gets more cluttered and I fear to encounter more problems in the future.