Rでシェープファイルを図示する方法はいろいろなところで紹介されていますが、
Mac環境のRでシェープファイルが図示できない問題があります。
以前GADM(https://gadm.org/)から入手したシェープファイルを図示しようとしたのですが、うまくいきませんでした。 身近な知り合いのMacユーザーの方も同じ症状でしたが、Windowsだと問題なく動くようです。
結局WindowsでうまくいってMacでうまくいかない原因はよくわからなかったのですが、 誰かの助けになればと思い解決策を記事に残します。
環境はMacOS 10.16, R version 4.0.2 です。
# 必要なパッケージの読み込み library(raster) library(sf) library(ggplot2) library(magrittr) library(rmapshaper)
GADMから日本の白地図をダウンロードします。
map <- raster::getData("GADM", country="JP", level=0)
sfオブジェクトに変更します。
map <- st_as_sf(map)
これをそのまま
ggplot(map)+ geom_sf()
で図示しようとすると、少なくとも私の環境ではPCがフリーズします(一度根気よく20分くらい待ったら図示してくれました)。
で、調べても解決法が出てこず困っていたのですが、この前たまたま対処法がわかりました。 どうやらシェープファイルの情報量が多すぎるのが問題らしいので、{rmapshaper}というパッケージで情報量を落とします。
keep=1で元のままです。 以下ではベクターデータの頂点の数を0.01%まで削減しているのだと認識しています。
jpn <- rmapshaper::ms_simplify(map, keep=0.0001, keep_shapes=TRUE)
これを図示すると...
ggplot(jpn)+ geom_sf()
頂点が減って単純化されてるのがわかります。 0.01%の情報量(?)にしてもギリ原型を保っています。
バイト数を確認すると以下のようになります。
object.size(map) # オリジナル
## 9897520 bytes
object.size(jpn) # 頂点削除後
## 8048 bytes
keep=0.01にすると、少なくとも日本地図のまま使う分には問題ないほどになります。
rmapshaper::ms_simplify(map, keep=0.01, keep_shapes=TRUE) %>% ggplot() + geom_sf()
{sf}パッケージのst_simplify関数でも同様のことができるけど、アルゴリズムが違くて{rmapshaper}の方が良いということです。
参考:https://www.r-bloggers.com/2021/03/simplifying-geospatial-features-in-r-with-sf-and-rmapshaper/