다각형이 찢어 지도록 강화


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을 사용하여 다각형 (유물)의 '찢어짐'의 원인은 무엇입니까? ). 강화하기 전에 spplot이 잘 보이기 때문에 강화 단계에서 찢어짐이 발생한다고 생각합니다.


문제를 제거하기 위해 먼저 데이터 세트를 일반화해야합니다 (프로그램이 많은 정점을 처리 할 수 ​​없음)
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)

잘못된 그룹

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

고정 플롯


1
@rcs에게 감사합니다. 이것이 정확히 문제입니다. 이제 수정되었습니다.
annievic

4
간단한 설명 : 강화 공간 다각형 데이터 세트 id에서 피쳐 groupID는 개별 링 (섬, 구멍 등)의 ID입니다. 따라서 id그룹으로 그리면 피처의 모든 비트가 하나의 링으로 그려 지므로 섬 사이를 이동할 때 "찢어짐"이됩니다.
Spacedman

후손을 위해, 나는 종종 그것을 보았 기 때문에 여기에 또 다른 제안을 남길 것입니다 ... 다각형 찢기의 일반적인 이유는 정렬되지 않은 데이터입니다. 올바른 group미학을 지정해도 문제가 해결되지 않으면 (이 특정 예제에는 적용되지 않음) y <- y[order(y$order),]아마도 시도 할 것입니다. order열은에 의하여 생성 fortify이 매우 이유로 기능.
dmp
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.