在这个使用 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 数据库来拉动州边界的示例。
使用
raster::getData
作为获取边界文件的便捷快捷方式。level
指行政级别,其中0
是国家/地区,1
是该国家/地区的下一级。请注意,这会将文件保存到您的工作目录中。我像您的示例一样使用st_transform
转换为阿尔伯斯投影。将多边形连接到
USArrests
数据集,并使用方便的dplyr
工具组合达科他州。请注意,我将两个状态的值相加,尽管我不清楚这是正确的做法(这个值不是平均值,所以也许我们应该取平均值?)这会自动合并两个状态的边界。在绘图之前,我使用
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/