如何使用 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")
我想将共享颜色的颜色更改为不同的颜色,比如红色。到目前为止,我绘制的是德国联邦州巴伐利亚州和奥地利各州。我从 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")