R/sf:将多边形边界限制为重叠多边形层

时间:2021-01-11 01:07:14

标签: r ggplot2 maps sf

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

下图是我的

two inconsistent borders

我是 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())

1 个答案:

答案 0 :(得分:0)

这比预期的要容易得多。 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())