Guest User

Untitled

a guest
May 2nd, 2017
642
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ggproj <- function(r, lat, lon, tolerance=0.001, plot.borders=TRUE, border.color='black') {
  2.     #r, lat, lon must be rasterLayers
  3.     #Adapted from
  4.     #http://stackoverflow.com/questions/43612903/how-to-properly-plot-projected-gridded-data-in-ggplot2
  5.     if (!compareRaster(r, lat, lon)) {stop('Inputs should have the same size and projection')}
  6.     require(ggplot2) #needs ggplot >= 2.2.1.9000
  7.     require(sf)
  8.     require(sp)
  9.     crs <- projection(r)
  10.  
  11.     coords = data.frame(lat = values(lat), lon = values(lon))
  12.     spPoints <- SpatialPointsDataFrame(coords,
  13.                                       data = data.frame(data = values(r)),
  14.                                       proj4string = CRS("+init=epsg:4326"))
  15.     orig_grid = spTransform(spPoints, crs)
  16.     polys = as(SpatialPixelsDataFrame(orig_grid, orig_grid@data, tolerance = tolerance),"SpatialPolygonsDataFrame")
  17.     polys_sf = as(polys, "sf")
  18.  
  19.     gg <- ggplot(polys_sf) +
  20.         geom_sf(aes(fill = data), color = "transparent") +
  21.         theme_bw() +
  22.         theme(panel.ontop=TRUE, panel.background=element_blank()) +
  23.         scale_x_continuous(expand = c(0, 0)) +
  24.         scale_y_continuous(expand = c(0, 0))
  25.  
  26.     if (plot.borders) {
  27.         require(maps)
  28.         borders <- sf::st_as_sf(map('world', plot = FALSE, fill = TRUE))
  29.         gg <- gg +
  30.                geom_sf(data = borders, fill = "transparent", color = border.color) +
  31.                coord_sf(crs = st_crs(crs),
  32.                         xlim = st_bbox(polys_sf)[c(1,3)],
  33.                         ylim = st_bbox(polys_sf)[c(2,4)]
  34.                 )
  35.     }
  36.     return(gg)
  37. }
RAW Paste Data