Rポリゴンを引き裂く原因を強化する


10

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を使用したポリゴン(アーティファクト)の「ティアリング」の原因は何ですか?)。要塞化の前のspplotが正常に見えるので、引き裂きは要塞化の段階で発生すると思います。


問題を解消するには、まずデータセットを一般化する必要があります(プログラムはその数の頂点を処理できません)
Mapperz

回答:


15

あなたは、あなたは使うべきgroup=groupaesマッピング。問題の再現可能な例を次に示します。

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)

間違ったAESグループ

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

固定プロット


1
@rcsありがとうございます、これがまさに問題です。現在は修正されています。
annievic

4
簡単な説明:要塞化された空間ポリゴンデータセットでidは、はフィーチャIDでありgroup、個々のリング(島、穴など)のIDです。したがってid、グループとして描画すると、フィーチャのすべてのビットが1つのリングとして描画されるため、アイランド間をジャンプするときに「ティアリング」が発生します。
Spacedman、2015年

後世のために、私は頻繁に見るので、ここで別の提案を残します...ポリゴンティアリングの一般的な理由は、並べ替えられていないデータです。正しいgroup審美性を指定しても解決しない場合(これはこの特定の例には当てはまりません)、y <- y[order(y$order),]おそらく解決します。order列はによって作成されたfortifyまさにこの理由のための機能。
dmp
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.