Tengo problemas para trazar mis datos espaciales usando ggplot2. El mapa se ve bien cuando se traza usando spplot, por lo que supongo que el desgarro se produce en la etapa de fortificación.
El código es el siguiente:
#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")
El agregado ha funcionado, como se puede ver en la trama (nota: encontré cómo agregar por regiones desde esta publicación SE: Unir polígonos espaciales por código en R )
#plot the resulting polygons using spplot
spplot(region_polygons)
Pero cuando fortifico los datos espaciales para poder usar ggplot, hay rasgaduras en los bordes.
#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()
¿Cómo puedo detener este desgarro?
He observado respuestas similares en SE, pero las respuestas sugieren que el desgarro ocurre durante una fusión ( ¿Cuál es la causa del 'desgarro' de los polígonos (artefactos) usando R, ggplot y geom_polygon? ). Creo que mi desgarro ocurre en la etapa de fortificación, ya que la mancha antes de la fortificación se ve bien.
Respuestas:
Deberías usarlo
group=group
en elaes
mapeo. Aquí hay un ejemplo reproducible de su problema:fuente
id
es la identificación de la característica ygroup
la identificación de anillos individuales (islas, agujeros, etc.). Entonces, si dibujas conid
el grupo, dibuja todos los bits de tu característica como un anillo, de ahí el "desgarro" cuando salta entre las islas.group
estética correcta no lo resuelve (lo cual no se aplica a este ejemplo específico),y <- y[order(y$order),]
probablemente lo intente . Laorder
columna crea lafortify
función por este mismo motivo.