R fortify menyebabkan poligon sobek

10

Saya mengalami masalah dalam memplot data spasial saya menggunakan ggplot2. Peta terlihat baik-baik saja ketika diplot menggunakan spplot, jadi saya berasumsi bahwa robekan terjadi pada tahap fortifikasi.

Kode tersebut adalah sebagai berikut:

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

Agregat telah berfungsi, seperti yang dapat dilihat oleh spplot (catatan: Saya menemukan cara agregat menurut wilayah dari pos SE ini: Gabung poligon spasial dengan kode dalam R )

#plot the resulting polygons using spplot
spplot(region_polygons)

masukkan deskripsi gambar di sini

Tetapi ketika saya memperkuat data spasial sehingga saya bisa menggunakan ggplot, ada sobekan di tepinya.

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

masukkan deskripsi gambar di sini

Bagaimana saya bisa menghentikan robekan ini?

Saya telah melihat respons yang serupa pada SE, tetapi tanggapan tersebut menyarankan bahwa robekan terjadi selama penggabungan ( Apa penyebab 'robeknya' poligon (artefak) menggunakan R, ggplot dan geom_polygon? ). Saya pikir air mata saya terjadi pada tahap fortifikasi sebagai tempat sebelum sebelum fortifikasi terlihat baik-baik saja.

annievic
sumber
Anda perlu menggeneralisasi dataset Anda terlebih dahulu untuk menghilangkan masalah (program Anda tidak dapat menangani banyak simpul)
Mapperz

Jawaban:

15

Anda harus Anda gunakan group=groupdalam aespemetaan. Ini adalah contoh masalah Anda yang dapat direproduksi:

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)

salah aes-grup

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

plot tetap

rcs
sumber
1
Terima kasih @rcs, inilah masalahnya. Sudah diperbaiki sekarang.
annievic
4
Penjelasan singkat: Dalam kumpulan data poligon spasial yang diperkaya, idadalah id fitur, dan groupid dari masing-masing cincin (pulau, lubang, dll.). Jadi jika Anda menggambar dengan idsebagai grup itu menarik semua bit fitur Anda sebagai satu cincin, maka "merobek" saat melompat antar pulau.
Spacedman
Untuk anak cucu, saya akan meninggalkan saran lain di sini karena saya sering melihatnya ... Alasan umum untuk merobek poligon adalah data yang tidak disortir. Jika menentukan groupestetika yang benar tidak menyelesaikannya (yang tidak berlaku untuk contoh khusus ini), mencoba y <- y[order(y$order),]mungkin akan berhasil. The orderkolom dibuat oleh fortifyfungsi karena alasan ini.
dmp