我正在使用 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())
答案 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())