R/sf:将多边形边界约束到重叠的多边形图层

R/sf: Constrain polygon borders to overlapping polygon layer

我正在使用 sf 库来绘制聚合数据,我想将我的多边形限制在另一组多边形的边界内。

下图是我的

我是 sf 的新手,所以如果我没有使用正确的术语,我深表歉意,但我想将图像“限制”为灰色边框,同时保留其所有内容。有没有一种干净的方法可以做到这一点?换句话说,将边界外的所有东西都丢掉。

df_map 中定义新多边形或在 ggplot 调用中格式化图像本身会更容易吗?我更喜欢后者,但如果是前者,这将如何完成。

我可以分享一下上面如何生成上图的代码如下:

library(tidyverse)
library(sf)
library(ggplot2)


ggplot() + 
  geom_sf(data = df_map, aes(fill = yellow_or_red), color = NA) +
  geom_sf(data = grey_borders, fill = NA, lwd = 1) +
  scale_fill_gradientn(breaks = seq(0, 1250, 250), 
                       colors =  brewer.pal(length(seq(0, 1250, 250)), 
                                            "YlOrRd")) +
  theme(legend.title = element_blank()) + 
  theme(axis.title = element_blank(),
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(),
        panel.background = element_blank(), 
        axis.text = element_blank(),
        axis.line = element_blank(),
        axis.ticks = element_blank())

这比预期的要容易得多。 sf::st_intersection() 正是为了这个目的。

library(tidyverse)
library(sf)
library(ggplot2)

df <- df_map %>% st_intersection(grey_borders)
ggplot() + 
  geom_sf(data = df, aes(fill = yellow_or_red), color = NA) +
  geom_sf(data = grey_borders, fill = NA, lwd = 1) +
  scale_fill_gradientn(breaks = seq(0, 1250, 250), 
                       colors =  brewer.pal(length(seq(0, 1250, 250)), 
                                            "YlOrRd")) +
  theme(legend.title = element_blank()) + 
  theme(axis.title = element_blank(),
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(),
        panel.background = element_blank(), 
        axis.text = element_blank(),
        axis.line = element_blank(),
        axis.ticks = element_blank())