r - 如何在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
我想知道如何在下图中绘制粉色线。
解决方案
这是一种使用sf
包的方法,并且geom_sf
在ggplot2
. 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 日创建。
推荐阅读
- python - 带有 rest_framework_simplejwt.token_blacklist 的 djongo 给出了创建表错误
- unity3d - Agora 的自定义视频源示例代码报错
- sql-server - 如何使用 sqoop 将数据导出到具有自动增量 ID 的 Microsoft Sql Table?
- python - spaCy nlp - 替换字符串
- php - curl 多次后不返回响应或 http 代码
- netsuite - 如何从已保存的搜索与列表中的高级 PDF 模板打印一个结果?
- excel - 如何在 Excel 中将 UTC 转换为日期时间
- vb.net - Directory.GetFiles 方法在 VB 中不起作用
- node.js - 在 Node 中将 CSV 对象转换为 JSON 对象
- sql - T-SQL 表获取正确查询