R'nin çokgenlerin yırtılmasına neden olan takviye


10

Ggplot2 kullanarak uzamsal verilerimi çizerken sorun yaşıyorum. Harita spplot kullanılarak çizildiğinde iyi görünüyor, bu yüzden yırtılmanın takviye aşamasında gerçekleştiğini varsayıyorum.

Kod aşağıdaki gibidir:

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

Toplama spplot tarafından görüldüğü gibi çalıştı (not: Ben bu SE yazı bölgeler tarafından nasıl toplamak için buldum: R koduna göre uzamsal çokgenler katılın )

#plot the resulting polygons using spplot
spplot(region_polygons)

resim açıklamasını buraya girin

Ancak uzamsal verileri güçlendirdiğimde ggplot kullanabilmem için kenarlarda yırtılma var.

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

resim açıklamasını buraya girin

Bu yırtılmayı nasıl durdurabilirim?

Ben SE benzer yanıtlara baktım, ama cevaplar bir birleşme sırasında yırtılma olduğunu göstermektedir (R, ggplot ve geom_polygon kullanarak çokgenler (eserler) 'yırtılma nedeni nedir? ). Bence yırtılma, takviye iyi görünmeden önce spplot olarak takviye aşamasında gerçekleşir.


sorunu gidermek için önce veri
kümenizi

Yanıtlar:


15

Sen kullanmalısınız group=groupiçinde aesharitalama. Sorununuzun tekrarlanabilir bir örneği:

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)

yanlış grup

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

sabit arsa


1
Teşekkürler @rcs bu tam olarak sorun. Şimdi düzeltildi.
annievic

4
Kısa açıklama: Güçlendirilmiş bir uzamsal çokgenler veri kümesinde, idözellik kimliği ve grouptek tek halkaların (adalar, delikler vb.) Eğer idgrup olarak beraberlik yaparsanız , bu özellik, tüm özellik bitlerini tek bir halka olarak çizer, dolayısıyla adalar arasında atlarken "yırtılma".
Spacedman

Gelecek nesiller için, sık sık gördüğüm için burada başka bir öneri bırakacağım ... Çokgen yırtılmasının yaygın bir nedeni sıralanmamış verilerdir. Doğru groupestetiği belirtmek onu çözmezse (bu belirli örnek için geçerli değildir), y <- y[order(y$order),]muhtemelen denemek olacaktır. orderSütun tarafından oluşturulan fortifybu çok nedenle fonksiyonu.
dmp
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.