溶解地图多边形

时间:2018-10-04 23:27:17

标签: r ggplot2 maps

我想溶解一个多边形,所以我只得到整个区域轮廓的线,而不是被县分割。

install.packages (c("tidyverse","mapdata","maps","stringr","viridis"))

library(tidyverse)
library(mapdata)
library(maps)
library(stringr)
library(viridis)

california <- map_data("state", region="california")

california1 <- ggplot() + 
  geom_polygon(data = california, 
               aes(x = long, y = lat, group = group), 
               color="black", fill="NA") + 
  coord_quickmap()

#california county lines
uscounties <-map_data("county")
ca_county <- uscounties %>% filter(region == "california")


central<- ca_county %>% 
  filter(subregion %in% c("alpline", "kings", "tulare", "fresno", "inyo", "kern", "madera"))

ca2 <- california1 + 
  theme_void() +
  geom_polygon(data = central,
               aes(x = long, y = lat, group = group), 
              fill = "white", color = "black") +
  geom_polygon(color = "black", fill = NA) + 
  annotate("text", x = -119, y = 46.5, label="Central", colour="black")

ca2

预先感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我之前已经回答过similar question。针对您的用例对其进行了稍微的重新设计,并在下面的带注释的代码中进行了解释:

library(tidyverse)
library(maps)

# get map (as map object)
county_map <- map("county", regions = "california",
                  fill = T, plot = FALSE)

# convert to SpatialPolygonsDataFrame object (using maptools & sp packages)
county_map_match <- data.frame(name = county_map$names) %>%
  separate(name, c("region", "subregion"), sep = ",", remove = FALSE) %>%
  mutate(central = subregion %in% c("alpline", "kings", "tulare", 
                                    "fresno", "inyo", "kern", "madera")) %>%
  column_to_rownames("name")
county_map <- maptools::map2SpatialPolygons(county_map, ID = county_map$names)
county_map <- sp::SpatialPolygonsDataFrame(county_map, county_map_match)
rm(county_map_match)

# remove any invalidity (using rgeos package) before dissolving 
rgeos::gIsValid(county_map) # check
county_map <- rgeos::gBuffer(county_map, byid = TRUE, width = 0)
rgeos::gIsValid(county_map) # check again (invalidities removed)

# dissolve by whether each polygon is part of central area
county_map <- maptools::unionSpatialPolygons(county_map, IDs = county_map$central)
county_map <- fortify(county_map)
county_map <- county_map %>% filter(group == "TRUE.1")

# plot all the central counties as one polygon
ggplot() +
  geom_polygon(data = county_map,
               aes(x = long, y = lat, group = group),
               fill = "white", colour = "black") +
  coord_map()

plot