R fortificar fazendo com que polígonos rasgem

10

Estou com problemas para plotar meus dados espaciais usando o ggplot2. O mapa parece bom quando plotado usando spplot, então estou assumindo que o rasgo ocorre no estágio de fortificação.

O código é o seguinte:

#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")

O agregado tem trabalhado, como pode ser visto pela spplot (nota: eu encontrei como agregar pelas regiões de este post SE: Junte polígonos espaciais por código em R )

#plot the resulting polygons using spplot
spplot(region_polygons)

insira a descrição da imagem aqui

Mas quando eu fortifico os dados espaciais para poder usar o ggplot, há lacunas.

#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()

insira a descrição da imagem aqui

Como posso parar com isso?

Eu observei respostas semelhantes no SE, mas as respostas sugerem que o rasgo ocorre durante uma mesclagem ( Qual é a causa do 'rasgo' de polígonos (artefatos) usando R, ggplot e geom_polygon? ). Eu acho que meu rasgo ocorre no estágio de fortificação, pois a mancha antes da fortificação parece boa.

annievic
fonte
você precisa para generalizar seu conjunto de dados primeiro para eliminar o problema (o seu programa não pode lidar com isso muitos vértices)
Mapperz

Respostas:

15

Você deve usar group=groupno aesmapeamento. Aqui está um exemplo reproduzível do seu problema:

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)

wronge aes-group

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

parcela fixa

rcs
fonte
11
Obrigado @rcs, este é exatamente o problema. Está consertado agora.
annievic
4
Breve explicação: Em um conjunto de dados de polígonos espaciais fortificados, idé o ID do recurso e groupo ID de anéis individuais (ilhas, orifícios etc.). Portanto, se você desenhar com ido grupo, ele desenha todos os bits do seu recurso como um anel, daí o "rasgo" à medida que salta entre as ilhas.
Spacedman
Para a posteridade, deixarei outra sugestão aqui, pois a vejo com frequência ... Um motivo comum para rasgar polígono são dados não classificados. Se especificar a groupestética correta não a resolver (o que não se aplica a este exemplo específico), y <- y[order(y$order),]provavelmente a tentativa será. A ordercoluna é criada pela fortifyfunção por esse mesmo motivo.
DMP