У меня возникли некоторые проблемы при построении моих пространственных данных с использованием 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? ). Я думаю, что мой разрыв происходит на стадии укрепления, так как сплоттер до укрепления выглядит хорошо.
Ответы:
Вы должны использовать
group=group
вaes
отображении. Вот воспроизводимый пример вашей проблемы:источник
id
- это идентификатор элемента иgroup
идентификатор отдельных колец (островков, дырок и т. Д.). Поэтому, если вы рисуетеid
в качестве группы, она рисует все биты вашего объекта как одно кольцо, отсюда и «разрыв», когда он прыгает между островами.group
эстетики не решает ее (что не относится к этому конкретному примеру), попытка,y <- y[order(y$order),]
вероятно, сработает. Именно по этой причинеorder
столбец создаетсяfortify
функцией.