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