如何使用 sf 更改共享边框的颜色?

How can I change the color of a shared border using sf?

我想将共享颜色的颜色更改为不同的颜色,比如红色。到目前为止,我绘制的是德国联邦州巴伐利亚州和奥地利各州。我从 https://gadm.org/download_country.html -

获取数据

德国 2 级 - https://biogeo.ucdavis.edu/data/gadm3.6/Rsf/gadm36_DEU_2_sf.rds

德国 1 级 - https://biogeo.ucdavis.edu/data/gadm3.6/Rsf/gadm36_DEU_1_sf.rds

奥地利 2 级 - https://biogeo.ucdavis.edu/data/gadm3.6/Rsf/gadm36_AUT_2_sf.rds

奥地利 1 级 - https://biogeo.ucdavis.edu/data/gadm3.6/Rsf/gadm36_AUT_1_sf.rds

library("sf")
library("raster")
library("dplyr")
library("spData")
library("spDataLarge")
library("ggplot2")
library("patchwork")
library(tmap)    # for static and interactive maps
library(ggpattern)

data_aut <- readRDS("~/plot_at_ger/data/gadm36_AUT_2_sf.rds")
data_ger <- readRDS("~/plot_at_ger/data/gadm36_DEU_2_sf.rds")
data_aut_high <- readRDS("~/plot_at_ger/data/gadm36_AUT_1_sf.rds")
data_aut_high <- data_aut_high[which(data_aut_high$NAME_1=='Salzburg' | data_aut_high$NAME_1=='Oberösterreich' | data_aut_high$NAME_1=='Tirol' | data_aut_high$NAME_1=='Vorarlberg'), ]
data_ger_high <- readRDS("~/plot_at_ger/data/gadm36_DEU_1_sf.rds")
data_ger_high <- data_ger_high[which(data_ger_high$NAME_1=='Bayern'), ]

ggplot() +
  geom_sf(data = ger_selected_data_bavaria, fill = NA) +
  geom_sf(data = aut_selected_data_rel, fill = NA) +
  geom_sf(data = data_aut_high, fill = NA, size = 1, color = "grey35") +
  geom_sf(data = data_ger_high, fill = NA, size = 1, color = "black") 

这会产生下图:

有没有办法改变共享边框的颜色?

谢谢!

{sf} > 1.0 的上下文中绘制共享边框有点棘手,因为它使用 s2 依赖项进行球形操作,并且 s2 库引入了半封闭多边形的新概念(这是在 GEOS 年代不存在)。

有关详细信息,请参阅 https://r-spatial.github.io/s2/reference/s2_options.html#model

无论如何,考虑这段代码,构建在 {giscoR} 包上以访问 EU NUTS 区域,以及 sf::st_intersection() 以查找共享边界。请注意 model = "closed" 的使用(即所有多边形包含它们的整个边界),这可能不是很明显,但对于代码按预期工作是必要的。

library(dplyr)
library(ggplot2)
library(giscoR)
library(sf)

bavaria <- gisco_get_nuts(country = "DE",
                          nuts_level = "1") %>% 
  filter(NUTS_NAME == "BAYERN")

austria <- gisco_get_nuts(country = "AT",
                          nuts_level = "2")

shared_border <- st_intersection(bavaria,
                                 austria,
                                 model = "closed") # this line is important!

ggplot() +
  geom_sf(data = bavaria, fill = NA, color = "gray40") +
  geom_sf(data = austria, fill = NA, color = "gray40") +
  geom_sf(data = shared_border, fill = NA, color = "red")