R củng cố khiến đa giác rách


10

Tôi đang gặp một số khó khăn khi vẽ dữ liệu không gian của mình bằng ggplot2. Bản đồ trông ổn khi được vẽ bằng cách sử dụng spplot, vì vậy tôi cho rằng sự xé rách xảy ra ở giai đoạn củng cố.

Mã như sau:

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

Tập hợp đã hoạt động, như spplot có thể nhìn thấy (lưu ý: Tôi đã tìm thấy cách tổng hợp theo các vùng từ bài SE này: Tham gia đa giác không gian theo mã trong R )

#plot the resulting polygons using spplot
spplot(region_polygons)

nhập mô tả hình ảnh ở đây

Nhưng khi tôi củng cố dữ liệu không gian để tôi có thể sử dụng ggplot, có rách xung quanh các cạnh.

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

nhập mô tả hình ảnh ở đây

Làm thế nào tôi có thể ngăn chặn sự xé này?

Tôi đã xem xét các phản hồi tương tự trên SE, nhưng các phản hồi cho thấy hiện tượng xé rách xảy ra trong quá trình hợp nhất ( Nguyên nhân của việc "xé rách" đa giác (tạo tác) bằng R, ggplot và geom_polygon là gì? ). Tôi nghĩ rằng sự xé rách của tôi xảy ra ở giai đoạn củng cố như là spplot trước khi củng cố có vẻ tốt.


bạn cần tổng quát hóa tập dữ liệu của mình trước để loại bỏ sự cố (chương trình của bạn không thể xử lý nhiều đỉnh đó)
Mapperz

Câu trả lời:


15

Bạn nên sử dụng group=grouptrong aesánh xạ. Dưới đây là một ví dụ có thể lặp lại về vấn đề của bạn:

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)

sai nhóm

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

cốt truyện cố định


1
Cảm ơn bạn @rcs đây chính xác là vấn đề. Bây giờ nó đã được sửa.
năm15

4
Giải thích ngắn: Trong bộ dữ liệu đa giác không gian được củng cố, idlà id tính năng và grouplà id của các vòng riêng lẻ (đảo, lỗ, v.v.). Vì vậy, nếu bạn vẽ idtheo nhóm, nó sẽ vẽ tất cả các bit của tính năng của bạn dưới dạng một vòng, do đó "xé" khi nó nhảy giữa các đảo.
Spainedman

Đối với hậu thế, tôi sẽ để lại một đề nghị khác ở đây vì tôi thường thấy nó ... Một lý do phổ biến cho việc xé đa giác là dữ liệu chưa được sắp xếp. Nếu chỉ định groupthẩm mỹ chính xác không giải quyết được nó (không áp dụng cho ví dụ cụ thể này), y <- y[order(y$order),]có lẽ sẽ cố gắng . Các ordercột được tạo ra bởi các fortifychức năng vì lý do này rất.
dmp
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.