r - 在 geom_map 中合并北达科他州和南达科他州两个州

标签 r ggplot2

在这个使用 geom_map 绘制美国各州的示例中

library(ggplot2)
library(dplyr)

us <- map_data("state")

arr <- USArrests %>% 
  add_rownames("region") %>% 
  mutate(region=tolower(region))

gg <- ggplot()
gg <- gg + geom_map(data=us, map=us,
                    aes(x=long, y=lat, map_id=region),
                    fill="#ffffff", color="#ffffff", size=0.15)
gg <- gg + geom_map(data=arr, map=us,
                    aes(fill=Murder, map_id=region),
                    color="#ffffff", size=0.15)
gg <- gg + scale_fill_continuous(low='thistle2', high='darkred', 
                                 guide='colorbar')
gg <- gg + labs(x=NULL, y=NULL)
gg <- gg + coord_map("albers", lat0 = 39, lat1 = 45) 
gg <- gg + theme(panel.border = element_blank())
gg <- gg + theme(panel.background = element_blank())
gg <- gg + theme(axis.ticks = element_blank())
gg <- gg + theme(axis.text = element_blank())
gg

如何将两个州合并在一起,例如北达科他州和南达科他州,如何消除这两个州之间的边界并将它们显示为“Megakotas”。

最佳答案

如果您不需要使用geom_map并且愿意深入研究R中的一些空间包,例如sf,您可以按如下方式实现这一点。这是我使用全局行政区域 GADM 数据库来拉动州边界的示例。

  1. 使用raster::getData作为获取边界文件的便捷快捷方式。 level 指行政级别,其中0 是国家/地区,1 是该国家/地区的下一级。请注意,这会将文件保存到您的工作目录中。我像您的示例一样使用 st_transform 转换为阿尔伯斯投影。

  2. 将多边形连接到 USArrests 数据集,并使用方便的 dplyr 工具组合达科他州。请注意,我将两个状态的值相加,尽管我不清楚这是正确的做法(这个值不是平均值,所以也许我们应该取平均值?)这会自动合并两个状态的边界。

  3. 在绘图之前,我使用 st_simplify 来减少顶点数量,以使绘图速度更快。然后我们可以简单地使用geom_sf并获得所需的绘图。

library(raster)
library(tidyverse)
library(sf)
# library(sp)
# library(rgeos)

states <- getData("GADM", country = "USA", level = 1) %>%
  st_as_sf() %>%
  st_transform(crs = 3310)

megakotas <- states %>% 
  left_join(
    y = rownames_to_column(USArrests, var = "State"),
    by = c("NAME_1" = "State")
  ) %>%
  filter(!NAME_1 %in% c("District of Columbia", "Alaska", "Hawaii")) %>%
  mutate(State = fct_collapse(NAME_1, Megakotas = c("North Dakota", "South Dakota"))) %>%
  group_by(State) %>%
  summarise(Murder = sum(Murder)) %>%
  st_simplify(dTolerance = 1000)

ggplot(megakotas) +
  geom_sf(aes(fill = Murder)) +
  scale_fill_viridis_c() +
  theme_minimal()

reprex package 于 2019-03-07 创建(v0.2.1)

关于r - 在 geom_map 中合并北达科他州和南达科他州两个州,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54893344/

相关文章:

r - 为什么 knitr 代码块中的 $PATH 与终端中的 $PATH 不同?

r - 如何将35GB数据加载到R中?

r - 'R' 中的“nloptr”包产生不同的结果?

r - ggplot 不会标记点

r - 对 GGplot2 使用 react 数据集?

r - 在 R 中一次生成 99 个数据集

r - 在 R 上时将 vi 模式转换为 emacs 模式

r - ggplot 辅助 y 轴使用 sec_axis 显示 z 分数

r - 使用 ggplot2 对齐子集数据点

r - 如何根据分组变量对ggplot中的结果进行排序