gpt4 book ai didi

R - 聚合县 map 多边形以创建自定义边界

转载 作者:行者123 更新时间:2023-12-02 10:44:57 28 4
gpt4 key购买 nike

我可以使用 ggplot 创建县 map 。我想使用此 map 数据,并绘制由县聚合而成的新边界。例如,与我的任务等效的任务是使用此县 map 数据集(我有另一个用于聚合县的变量)来绘制州边界(“区域”变量),而不是县边界。

简单地更改 ggplot 中的组对此不起作用。我相信我可能需要根据我用来聚合的变量创建新的多边形形状,但我不确定。关于我如何做到这一点有什么想法吗?非常感谢任何帮助!

library(ggplot2)

# load county map data
m.county <- map_data("county")
head(m.county)
long lat group order region subregion
1 -86.50517 32.34920 1 1 alabama autauga
2 -86.53382 32.35493 1 2 alabama autauga
3 -86.54527 32.36639 1 3 alabama autauga
4 -86.55673 32.37785 1 4 alabama autauga
5 -86.57966 32.38357 1 5 alabama autauga
6 -86.59111 32.37785 1 6 alabama autauga

# map county data with county borders
ggplot(data = m.county) +
geom_polygon(aes(x=long, y=lat,group=group))

最佳答案

您可以使用 library(rgeos) 中的 gUnaryUnion 来合并多边形,但是当您使用库 maps 中的 map 时,这需要几个步骤:

从 map 库中获取数据,这就是使用get_map

library(ggplot2)
library(sp)
library(rgdal)
library(maps)
library(mapdata)

# adapted from
# http://stackoverflow.com/questions/26062280/converting-a-map-object-to-a-spatialpolygon-object
require(sp)
require(maptools)
county <- map("county", fill = TRUE)

将 map 数据转换为library(sp)的SpatialPolygonsDataFrame

head(county$names)
county.sp <- map2SpatialPolygons(county, IDs = as.factor(county$names),
proj4string = CRS("+proj=longlat +datum=WGS84"))

# Add information data of the polygons
region <- sapply(strsplit(county$names, ","), function(x) x[1])
subregion <- sapply(strsplit(county$names, ","), function(x) x[2])
subregion[is.na(subregion)] <- region[is.na(subregion)]

# Create the SpatialPolygonsDataFrame
county.sp.data <- SpatialPolygonsDataFrame(
county.sp,
data = data.frame(region = region,
subregion = subregion),
match.ID = FALSE)

使用gUnaryUnion根据区域合并多边形

由于库 maps 中的 map 在拓扑方面并不干净,因此您需要使用缓冲区作为清理它的技巧。

library(rgeos)
# Because of topology problems
county.sp.data.buffer <- gBuffer(county.sp.data, byid = TRUE, width = 0)
# Merge polygons according to region
county.region <- gUnaryUnion(county.sp.data.buffer,
id = county.sp.data.buffer@data$region)

转换回适合ggplot的数据集

使用 fortify 能够使用 ggplot 绘制空间数据

county.fortify <- fortify(county.region)

ggplot(data = county.fortify) +
geom_polygon(aes(x=long, y=lat, fill=group)) +
guides(fill = FALSE)

关于R - 聚合县 map 多边形以创建自定义边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43174769/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com