เสริมกำลังทำให้รูปหลายเหลี่ยมฉีกขาด


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

คำตอบ:


15

คุณควรใช้group=groupในการaesทำแผนที่ นี่คือตัวอย่างของปัญหาของคุณ:

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)

ae-group

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

พล็อตคงที่


1
ขอบคุณ @rcs นี่เป็นปัญหา ตอนนี้ได้รับการแก้ไขแล้ว
annievic

4
คำอธิบายสั้น ๆ : ในชุดข้อมูลรูปหลายเหลี่ยมเชิงพื้นที่เสริมidเป็นรหัสคุณลักษณะและgroupเป็นรหัสของวงแหวนแต่ละวง (เกาะหลุม ฯลฯ ) ดังนั้นหากคุณวาดidเป็นกลุ่มมันจะดึงบิตทั้งหมดของคุณสมบัติของคุณเป็นแหวนหนึ่งดังนั้น "ฉีก" ตามที่กระโดดข้ามเกาะ
Spacedman

สำหรับคนรุ่นหลังฉันจะฝากข้อเสนอแนะไว้ที่นี่อีกครั้งเพราะฉันเห็นมันบ่อยครั้ง ... สาเหตุทั่วไปของการฉีกรูปหลายเหลี่ยมคือข้อมูลที่ไม่เรียงลำดับ หากการระบุgroupความงามที่ถูกต้องไม่สามารถแก้ไขได้ (ซึ่งไม่สามารถใช้กับตัวอย่างเฉพาะนี้ได้) ก็y <- y[order(y$order),]อาจจะลองได้ orderคอลัมน์ถูกสร้างโดยfortifyฟังก์ชั่นสำหรับเหตุผลอย่างนี้
dmp
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.