从R中的美国县级地图中删除五大湖

Pat*_*ick 3 maps r ggplot2 r-maptools r-sf

我正在使用R在县级绘制美国地图。我从GADM下载了美国的shapefile 。县级形状文件是“ 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)
Run Code Online (Sandbox Code Playgroud)

大湖区(用红色箭头显示)被绘制而不是空白: 在此处输入图片说明

我想要的是下图,大湖区留为空白: 在此处输入图片说明

如何从“ gadm36_USA_2.shp”中识别出与大湖区相对应的行,以便删除它们?

我了解,除了GADM之外,还有其他获取shapefile的方法。我相信GADM是在全球范围内提供驻地的绝佳来源。我希望借此机会更好地了解从GADM下载的数据。

当然,欢迎使用其他方法来获取美国县级边界数据。我注意到该USAboundaries软件包还提供了国家,州和县级别的公文,但是我在安装关联的USAboundariesData软件包时遇到了困难。除了GADM的shapefile以外,任何以美国方式吸引美国各州的想法都值得欢迎。谢谢。

Maj*_*jid 5

一种方法是删除Lake现有记录中标记有的每个功能(当前为13个功能)。首先,您需要在属性表中找到湖泊名称,如下所示:

# 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, ]
Run Code Online (Sandbox Code Playgroud)

然后,您可以映射其余功能:

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
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

另一种方法(更容易但不灵活)是通过Water bodyENGTYPE_2以下值中排除值来映射县要素:

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
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明