Home > other >  Removing redundant areas from a map in R (shapefile)
Removing redundant areas from a map in R (shapefile)

Time:04-19

I plotted a few European countries on a map, but there are some outliers which I don't need. I tried to remove them from my spatial df using different ways suggested in similar questions but they didn't work for this case. Could you please give me your ideas on removing them? I appreciate it. The shape file is available

CodePudding user response:

Here is how you can do that with terra (the replacement for raster):

myCountries <- c("Austria", "Belgium", "Czech Republic", "Denmark", "Estonia", "Finland",
                 "France", "Germany", "Latvia", "Hungary", "Iceland", "Ireland", "Italy",
                 "Netherlands", "Norway", "Portugal", "Poland", "Spain", "Sweden", "Switzerland",    
                 "Turkey", "United Kingdom")

library(terra)
countries  <- vect('ne_110m_admin_0_countries.shp')
eur <- countries[countries$NAME_EN %in% myCountries ,]

e <- ext(c(-28, 48, 35, 76)))
x <- crop(eur, e)

plot(x, "NAME_EN")

You can interactively find the extent you need for cropping by doing

 plot(eur)
 e <- draw()
 # now click on the map twice

Or subset interactively, like this:

 d <- disagg(eur)
 plot(d)
 s <- sel(d) # now draw a bounding box on the plot
 a <- aggregate(s, "NAME_EN")
 plot(a, "NAME_EN")

And you can coerce the SpatVector objects to sp or sf types like this:

 sf <- sf::st_as_sf(x) 
 library(raster)
 sp <- as(x, "Spatial")

Or vice versa with:

 y <- vect(sf)

CodePudding user response:

Instead of using the SP package, I find the SF package is better as it plays well with ggplot2. Then limiting the canvas is straightforward and adds the ability to colour the countries.

library(rgdal)
library(ggplot2)

myCountries <- c("Austria", "Belgium", "Czech Republic", "Denmark", "Estonia", "Finland",
                 "France", "Germany", "Latvia", "Hungary", "Iceland", "Ireland", "Italy",
                 "Netherlands", "Norway", "Portugal", "Poland", "Spain", "Sweden", "Switzerland",    
                 "Turkey", "United Kingdom")

countries  <- readOGR("C:/R/projects/ne_110m_admin_0_countries/ne_110m_admin_0_countries.shp")

eurcountries <- countries[countries$NAME_EN %in% myCountries, ]
    
eurcountries3 <- sf::st_as_sf(eurcountries)

ggplot(eurcountries3)  
  geom_sf(aes(fill = ADMIN))  
  lims(x = c(50,-40), y = c(30, 74))  
  guides(fill = "none")  
  theme_void()

enter image description here

  • Related