Search code examples
rrasterr-maptoolsrgdal

Plotting a raster behind a shapefile


How can I plot a "raster" object behind a shapefile object? Both plot fine on their own but the points don't plot over the raster:

require(rgdal)
require(maptools)
require(raster)

myproj = "+proj=utm +zone=12 +north +ellps=WGS84 +units=m"
shp = readShapeSpatial(fn.shp, proj4string = CRS(myproj))
ras = raster(fn.tif)

plot(ras)
plot(shp, bg="transparent", add=TRUE)

Solution

  • Overplotting raster plots with points, lines, and polygons should work just fine, as the following example shows.

    My best guess would be that the Spatial* objects you are attempting to plot on top of the raster fall outside of the region being plotted. Have you checked that both the raster and Spatial* objects are in the same CRS, and (assuming they are) that the bounding boxes overlap? (i.e. try bbox(shp) and bbox(ras), and compare the results).

    library(rgdal)
    library(raster)
    # Create a raster
    ras <- raster(ncols=36, nrows=18)
    ras[] <- runif(ncell(ras))
    # Create a SpatialPoints object
    shpPts <- spsample(Spatial(bbox=bbox(ras)), 20, type="random")
    # Create a SpatialPolygons object
    p1 <- rbind(c(-10,0), c(140,60), c(160,0), c(140,-55), c(-10,0))
    shpPolys <- SpatialPolygons( list(Polygons(list(Polygon(p1)), 1)))
    
    # Plot them, one layer after another
    plot(ras)
    plot(shpPts, pch=16, col="red", add=TRUE)
    plot(shpPolys, col="yellow", add=TRUE)
    

    enter image description here