Обрезка sf-карты в R
Я пытаюсь отобразить все реки Пиренейского полуострова, как видно на изображении, но шейп-файл включает Канарские острова и информацию о Северной Африке. Для его построения я использовал:
library(sf)
library(tidyverse)
rios <- st_read("/Users/JMFR/Downloads/BCN500/BCN500_0301L_HIDROGRAFIA.shp")
ggplot() +
borders("world", c("spain", "portugal"), fill = "lightsteelblue") +
geom_sf(data = rios)
Файл формы можно скачать с https://www.dropbox.com/s/gqoz9xppf4bjwt2/bcn500_0301l_hidrografia.shp?dl=0

rios <- rios %>%
drop_na()
Я пытался использовать
rios <- st_crop(rios, c(xmin= -9.80, ymin = 27.68933, xmax = 4.837648, ymax = 35.95))
Но, как показывает сюжет, я получил всего несколько рек из Северной Африки.

Но я не знаю, как удалить всю информацию с Канарских островов. Моя конечная цель - это участок к северу от широты. 35.95 и до длинного -9.80, так что я могу получить что-то, потому что это изображение такое же, что и из красного квадрата).

Какие-либо предложения?
Ответы
Ваша степень обрезки, конкретно ymin
и ymax
неверна. В коде, который вы показали, вы обрезали только африканскую часть. Это должно соответствовать Пиренейскому полуострову:
rios <- st_crop(rios, c(xmin= -9.80, ymin = 36, xmax = 4.837648, ymax = 44))
Обрезка, как вы видели, обрезает элементы до квадратной ограничительной рамки; st_intersection
делает клип вдоль границы слоя отсечения, в вашем случае я бы отфильтровал острова, а затем пересек:
library(ggplot2)
library(raster)
library(sf)
library(dplyr)
esp = getData(country = "ESP", level = 1)
esp = esp %>% st_as_sf() %>% filter(!NAME_1 %in% c("Islas Canarias", "Islas Baleares"))
rios = st_read("/Users/JMFR/Downloads/BCN500/BCN500_0301L_HIDROGRAFIA.shp")
rios = st_intersection(rios, esp)