首页 > 解决方案 > 如何在R中绘制美国多个州的轮廓?

问题描述

我想使用经度和纬度点在 R 中绘制美国多个州的轮廓。现在只能画出每个州的轮廓,所以想知道如何画出美国多个州的轮廓(只有外线)。

library(tidyverse)
library(knitr)    
library(broom)
library(stringr)
library(modelr)
library(forcats)
library(ggmap)


states <- map_data("state")# %>% as_tibble()
counties <- map_data("county")
il_df <- filter(fifty_states, id == "illinois")
midwest <- subset(fifty_states, id %in% c("illinois", "indiana", "iowa",
                                    "kansas", "michigan", "minnesota",
                                    "missouri", "nebraska", "north dakota",
                                    "ohio", "south dakota", "wisconsin"))


il_mid <- ggplot(data = midwest, mapping = aes(x = long, y = lat, group = group)) + 
  coord_fixed(1.3) + 
  geom_polygon(color = "black", fill = "gray")
il_mid

在此处输入图像描述

我想知道如何在下图中绘制粉色线。

在此处输入图像描述

标签: rggplot2

解决方案


这是一种使用sf包的方法,并且geom_sfggplot2. fiftystater我从提供阿拉斯加和夏威夷作为插图的 nice 包中获取地图数据,但它需要转换为sf格式。我使用这里的答案来做到这一点。

然后剩下的就很简单了,我们只filter需要正确的状态,将它们与 联合起来summarise.sf,然后用geom_sf来绘制结果。

library(tidyverse)
library(sf)
#> Linking to GEOS 3.6.1, GDAL 2.2.3, proj.4 4.9.3
library(fiftystater)

sf_fifty <- sf::st_as_sf(fifty_states, coords = c("long", "lat")) %>% 
  group_by(id, piece) %>% 
  summarize(do_union = FALSE) %>%
  st_cast("POLYGON") %>% 
  ungroup()

midwest <- sf_fifty %>%
  filter(
    id %in% c(
      "illinois", "indiana", "iowa",
      "kansas", "michigan", "minnesota",
      "missouri", "nebraska", "north dakota",
      "ohio", "south dakota", "wisconsin"
    )
  ) %>%
  summarise(id = "midwest")

ggplot() +
  theme_minimal() +
  geom_sf(data = sf_fifty) +
  geom_sf(data = midwest, col = "hotpink", alpha = 0, size = 2)

reprex 包(v0.2.0) 于 2018 年 5 月 24 日创建。


推荐阅读