J'ai du mal à tracer mes données spatiales à l'aide de ggplot2. La carte semble bien lorsqu'elle est tracée à l'aide de spplot, donc je suppose que la déchirure se produit au stade de fortification.
Le code est comme suit:
#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")
L'agrégat a fonctionné, comme le montre le spplot (note: j'ai trouvé comment agréger par les régions de ce post SE: joindre les polygones spatiaux par code en R )
#plot the resulting polygons using spplot
spplot(region_polygons)
Mais quand je fortifie les données spatiales pour pouvoir utiliser ggplot, il y a des déchirures sur les bords.
#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()
Comment puis-je arrêter cette déchirure?
J'ai examiné des réponses similaires sur SE, mais les réponses suggèrent que le déchirement se produit lors d'une fusion ( quelle est la cause du `` déchirement '' des polygones (artefacts) à l'aide de R, ggplot et geom_polygon? ). Je pense que mon déchirement se produit au stade de la fortification, car le spplot avant la fortification semble bien.
Réponses:
Vous devez utiliser
group=group
dans leaes
mappage. Voici un exemple reproductible de votre problème:la source
id
est l'identifiant de l'entité etgroup
l'identifiant des anneaux individuels (îles, trous, etc.). Donc, si vous dessinez avecid
comme groupe, il dessine tous les bits de votre fonctionnalité en un seul anneau, d'où le "déchirement" en sautant entre les îles.group
esthétique correcte ne le résout pas (ce qui ne s'applique pas à cet exemple spécifique), essayer ley <- y[order(y$order),]
fera probablement. Laorder
colonne est créée par lafortify
fonction pour cette même raison.