name - title in ggplot2 r



поместите два sf многоугольника без проблем (1)

Эта проблема

Предположим, у нас есть два шейп-файла, которые должны плавно граничить. Только они этого не делают. Есть ли способ заставить их придерживаться друг друга без пробелов?

Конкретный случай

У меня есть два шейп-файла: один для европейских регионов - REG , другой для соседних стран - NEI . Оба шейп-файла взяты из репозитория Евростата и должны хорошо сочетаться; но есть небольшие пробелы. Кроме того, мне нужно упростить полигоны, и тогда пробелы станут действительно заметными.

Лучшее, что я могу придумать

Я пробовал несколько подходов, но безуспешно. Единственный способ добиться желаемого результата, который я вижу, требует следующих шагов:

  • создать линию sf с границей между моими шейп-файлами;
  • из этой линии создайте буферный многоугольник, достаточно большой, чтобы покрыть все пробелы;
  • присоединить и распустить этот буфер в шейп-файл для соседей - NEI ;
  • NEI расширенный NEI с помощью шейп- NEI REG .

Очевидно, это довольно неуклюжий обходной путь.

Есть ли лучший способ пойти?

Воспроизводимый пример в этой сути

Минимальный пример

# install dev version of ggplot2
devtools::dev_mode()
devtools::install_github("tidyverse/ggplot2")

library(tidyverse)
library(sf)
library(rmapshaper) 
library(ggthemes)


# load data
source(file = url("https://gist.githubusercontent.com/ikashnitsky/4b92f6b9f4bcbd8b2190fb0796fd1ec0/raw/1e281b7bb8ec74c9c9989fe50a87b6021ddbad03/minimal-data.R"))

# test how good they fit together
ggplot() + 
        geom_sf(data = REG, color = "black", size = .2, fill = NA) +
        geom_sf(data = NEI, color = "red", size = .2, fill = NA)+
        coord_sf(datum = NA)+
        theme_map()

ggsave("test-1.pdf", width = 12, height = 10)

# simplify
REGs <- REG %>% ms_simplify(keep = .5, keep_shapes = TRUE)
NEIs <- NEI %>% ms_simplify(keep = .5, keep_shapes = TRUE)


ggplot() + 
        geom_sf(data = REGs, color = "black", size = .2, fill = NA) +
        geom_sf(data = NEIs, color = "red", size = .2, fill = NA)+
        coord_sf(datum = NA)+
        theme_map()

ggsave("test-2.pdf", width = 12, height = 10)

ms_simplify кажется, работает на вашем минимальном примере, но сначала вам нужно сгруппировать два «шейп-файла» в один «шейп-файл». При необходимости их будет легко разделить после упрощения границ.
(примечание: моя версия rmapshaper возвращает ошибку, когда ms_simplify используется с объектом sf . Вот почему я преобразовал свой объект tmp объект sp с помощью as(tmp, "Spatial") )

NEI <- st_transform(NEI, st_crs(REG)$epsg)
tmp <- rbind(REG , NEI)
tmp <- ms_simplify(as(tmp, "Spatial"), keep = .1, keep_shapes = T)
ggplot() + geom_sf(data = st_as_sf(tmp)) + theme_bw()





sf