从 R 中的美国县级地图中删除五大湖
Removing the Great Lakes from US county-level maps in R
我正在使用 R 绘制美国县级地图。我从 GADM 下载了美国的 shapefile。县级shape文件为“gadm36_USA_2.shp”。然后我使用下面的代码绘制地图:
library(sf)
library(tidyverse)
us2 <- st_read("<Path>\gadm36_USA_2.shp")
mainland2 <- ggplot(data = us2) +
geom_sf(aes(fill = NAME_2), size = 0.4, color = "black") +
coord_sf(crs = st_crs(2163),
xlim = c(-2500000, 2500000),
ylim = c(-2300000, 730000)) + guides(fill = F)
五大湖区(用红色箭头表示)已绘制出来,而不是留空:
我要的是如下图,大湖区留空:
如何从“gadm36_USA_2.shp”中识别出哪些行对应于五大湖地区,以便我可以删除它们?
我知道除了 GADM 之外,还有其他方法可以获取 shapefile。我相信 GADM 是提供全球边界的极好资源。我想借此机会更好地了解从 GADM 下载的数据。
当然,欢迎使用其他方式获取美国县级边界数据。我注意到 USAboundaries
包还提供国家、州和县级边界,但我在安装相关的 USABoundariesData 包时遇到了困难。欢迎任何以 GADM 的 shapefile 以外的方式绘制美国县的想法。谢谢。
一种方法是删除现有记录中标记有 Lake
的每个特征(目前有 13 个特征)。首先,您需要在属性 table 中找到湖泊名称,如下所示:
# retrieving the name of lakes and excluding them from the sf
all.names = us2$NAME_2
patterns = c("Lake", "lake")
lakes.name <- unique(grep(paste(patterns, collapse="|"), all.names, value=TRUE, ignore.case = TRUE))
#[1] "Lake and Peninsula" "Lake" "Bear Lake" "Lake Michigan" "Lake Hurron" "Lake St. Clair"
#[7] "Lake Superior" "Lake of the Woods" "Red Lake" "Lake Ontario" "Lake Erie" "Salt Lake"
#[13] "Green Lake"
`%notin%` <- Negate(`%in%`)
us <- us2[us2$NAME_2 %notin% lakes.name, ]
然后你可以映射剩余的特征:
mainland2 <- ggplot(data = us) +
geom_sf(aes(fill = NAME_2), size = 0.4, color = "black") +
coord_sf(crs = st_crs(2163),
xlim = c(-2500000, 2500000),
ylim = c(-2300000, 730000)) + guides(fill = F)
mainland2
另一种方法(更简单但不太灵活)是通过从 ENGTYPE_2
中排除 Water body
值来映射县特征,如下所示:
us <- us2[(us2$ENGTYPE_2) != "Water body",]
mainland2 <- ggplot(data = us) +
geom_sf(aes(fill = NAME_2), size = 0.4, color = "black") +
coord_sf(crs = st_crs(2163),
xlim = c(-2500000, 2500000),
ylim = c(-2300000, 730000)) + guides(fill = F)
mainland2
我正在使用 R 绘制美国县级地图。我从 GADM 下载了美国的 shapefile。县级shape文件为“gadm36_USA_2.shp”。然后我使用下面的代码绘制地图:
library(sf)
library(tidyverse)
us2 <- st_read("<Path>\gadm36_USA_2.shp")
mainland2 <- ggplot(data = us2) +
geom_sf(aes(fill = NAME_2), size = 0.4, color = "black") +
coord_sf(crs = st_crs(2163),
xlim = c(-2500000, 2500000),
ylim = c(-2300000, 730000)) + guides(fill = F)
五大湖区(用红色箭头表示)已绘制出来,而不是留空:
我要的是如下图,大湖区留空:
如何从“gadm36_USA_2.shp”中识别出哪些行对应于五大湖地区,以便我可以删除它们?
我知道除了 GADM 之外,还有其他方法可以获取 shapefile。我相信 GADM 是提供全球边界的极好资源。我想借此机会更好地了解从 GADM 下载的数据。
当然,欢迎使用其他方式获取美国县级边界数据。我注意到 USAboundaries
包还提供国家、州和县级边界,但我在安装相关的 USABoundariesData 包时遇到了困难。欢迎任何以 GADM 的 shapefile 以外的方式绘制美国县的想法。谢谢。
一种方法是删除现有记录中标记有 Lake
的每个特征(目前有 13 个特征)。首先,您需要在属性 table 中找到湖泊名称,如下所示:
# retrieving the name of lakes and excluding them from the sf
all.names = us2$NAME_2
patterns = c("Lake", "lake")
lakes.name <- unique(grep(paste(patterns, collapse="|"), all.names, value=TRUE, ignore.case = TRUE))
#[1] "Lake and Peninsula" "Lake" "Bear Lake" "Lake Michigan" "Lake Hurron" "Lake St. Clair"
#[7] "Lake Superior" "Lake of the Woods" "Red Lake" "Lake Ontario" "Lake Erie" "Salt Lake"
#[13] "Green Lake"
`%notin%` <- Negate(`%in%`)
us <- us2[us2$NAME_2 %notin% lakes.name, ]
然后你可以映射剩余的特征:
mainland2 <- ggplot(data = us) +
geom_sf(aes(fill = NAME_2), size = 0.4, color = "black") +
coord_sf(crs = st_crs(2163),
xlim = c(-2500000, 2500000),
ylim = c(-2300000, 730000)) + guides(fill = F)
mainland2
另一种方法(更简单但不太灵活)是通过从 ENGTYPE_2
中排除 Water body
值来映射县特征,如下所示:
us <- us2[(us2$ENGTYPE_2) != "Water body",]
mainland2 <- ggplot(data = us) +
geom_sf(aes(fill = NAME_2), size = 0.4, color = "black") +
coord_sf(crs = st_crs(2163),
xlim = c(-2500000, 2500000),
ylim = c(-2300000, 730000)) + guides(fill = F)
mainland2