R加强造成多边形撕裂


10

我在使用ggplot2绘制空间数据时遇到了一些麻烦。使用spplot绘制地图时,地图看起来不错,因此我假设撕裂发生在强化阶段。

代码如下:

#install the packages
library(rgdal)
library(mapproj)
library(raster)
library(rgeos)
library(ggplot2)
library(plyr)

if (!require(gpclib)) install.packages("gpclib", type="source")
gpclibPermit()

setwd("C:/Users/My Documents")

#read in laa to regional mapping
#must aggregate to higher level regions as data is provided at this higher level
laa_region_mapping <- read.csv("laa_region.csv", header = TRUE)

#read in LAA polygons
laa_polygons <- readOGR("ctyua_ew_generalised_WGS84.json", "OGRGeoJSON")

#merge by laa to add region column to polygon data
laa_polygons_with_region_data <- merge(laa_polygons, laa_region_mapping,
                                by.x = "CTYUA13NM", by.y = "LAA",
                                all.x = TRUE, all.y = TRUE)

# aggregate laa polygons by the 21 regions (aggregate by regoin_code)
region_polygons <- raster::aggregate(laa_polygons_with_region_data, "region_code")

聚合已起作用,如spplot所示(请注意:我发现了如何通过此SE帖子中的区域进行聚合:通过R中的代码连接空间多边形

#plot the resulting polygons using spplot
spplot(region_polygons)

在此处输入图片说明

但是,当我加强空间数据以便使用ggplot时,边缘会撕裂。

#fortify and merge to create the data frame ggplot will show on the map
region_polygons@data$id <- rownames(region_polygons@data)
region_polygons.points <- fortify(region_polygons, region = "id")

# plot the fortified df using ggplot
ggplot(data = region_polygons.points, aes(x= long, y = lat, group = id, fill=id)) + geom_polygon()

在此处输入图片说明

我怎样才能阻止这种流泪?

我在SE上看到了类似的响应,但是响应表明在合并过程中会发生撕裂(使用R,ggplot和geom_polygon对多边形(工件)“撕裂”的原因是什么?)。我认为我的眼泪发生在强化阶段,因为强化之前的内容看起来还不错。


您需要首先对数据集进行一般化以消除问题(您的程序无法处理那么多的顶点)
Mapperz

Answers:


15

您应该group=groupaes映射中使用。这是您的问题的可复制示例:

library("ggplot2")
library("raster")

x <- getData('GADM', country='GBR', level=2)
y <- fortify(x, region="NAME_2")
head(y)
#     long   lat order  hole piece      group       id
# 1 -2.049 57.23     1 FALSE     1 Aberdeen.1 Aberdeen
# 2 -2.049 57.23     2 FALSE     1 Aberdeen.1 Aberdeen
# 3 -2.049 57.23     3 FALSE     1 Aberdeen.1 Aberdeen
# 4 -2.050 57.23     4 FALSE     1 Aberdeen.1 Aberdeen
# 5 -2.050 57.23     5 FALSE     1 Aberdeen.1 Aberdeen
# 6 -2.050 57.23     6 FALSE     1 Aberdeen.1 Aberdeen


# wrong group aesthetic
ggplot(data=y, aes(y=lat, x=long, group=id, fill=id)) +
  geom_polygon() + 
  guides(fill=FALSE)

阿尔斯集团

# fixed plot
ggplot(data=y, aes(y=lat, x=long, group=group, fill=id)) +
  geom_polygon() +
  guides(fill=FALSE)

固定地块


1
谢谢@rcs,这正是问题所在。现在已修复。
annievic

4
简短说明:在强化的空间多边形数据集中,id是要素ID,并且group是各个环(岛,孔等)的ID。因此,如果id以组为一组进行绘制,则它将要素的所有位绘制为一个环,因此在岛之间跳跃时会产生“撕裂”。
Spacedman

为了后代,我会在这里留下另一个建议,因为我经常看到它。多边形撕裂的一个常见原因是未排序的数据。如果指定正确的group美学方法不能解决问题(不适用于此特定示例),则y <- y[order(y$order),]可能会尝试。为此,该order列是由fortify函数创建的。
dmp
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.