如何在R中绘制多个美国州的轮廓?

4
我希望使用经纬度点在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

enter image description here

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

enter image description here


2
什么是问题?您已经绘制了多个状态,如图所示。 - Calum You
1
@CalumYou 我想要绘制多个州的一个轮廓,而不是每个州的轮廓。 - MMM
1
也许在这里可以使用 rgeos::gUnion - r2evans
2个回答

5
这里介绍一种使用sf包和开发版本的方便的geom_sf方法。我从好用的fiftystater包中获取地图数据,其中包括阿拉斯加州和夏威夷州,但需要将其转换为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 package (v0.2.0)在2018年5月24日创建的。


1
以下是一个快速而简单的方法,适用于您的示例,假设您想要勾勒出所有外边缘:
ggplot(data = midwest, mapping = aes(x = long, y = lat, group = group)) + 
  coord_fixed(1.3) + 
  geom_polygon(color = "hotpink", size = 5) + # or some other arbitrarily large number
  geom_polygon(color = "black", fill = "gray")

额外的geom_polygon层为每个多边形提供了粉色轮廓,但只有原始图层未覆盖的边缘可见。

plot

请注意,对于更复杂的情况(例如,您希望绘制所有美国州的地图,但仅显示东北/中西部/南部/西部州的轮廓),这种方法不起作用。在这种情况下,您可能需要将数据框合并到适当的空间对象,并合并底层多边形,例如使用rgeos::gUnion,如@r2evans所建议的那样。

谢谢!实际上我想绘制所有美国州的地图,但是对于一些具有轮廓线的多个州,我需要使用rgeos::gUnion - MMM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接