参考にした資料
Creating GeoJSON out of Shapefile in R
Tidy spatial data in R: using dplyr, tidyr, and ggplot2 with sf
この記事は現在作成中のオンラインコースで、感染症の発生状況を地図で可視化したいと思ったときに、調べたことをまとめてあります。。
作成にあたり、上記の情報を参考にしました。
では行ってみましょう。
データのダウンロード
まず、白地図を作成するためには都道府県の県境の位置を示すデータが必要になります。国土地理院のデータを利用する方法もありますが、今回は、 Natural Earthのオープンデータを利用しました。
国土地理院のデータについてはこんな記事もありました:
【実習編】非専門家のためのQGIS ~白地図を描こう_都道府県界~
Shapeファイルの読み込み
# install.packages("sf")
つまづいたところ:単純に.shpファイルを読み込めばよいと思って読もうとするとエラーがでて動きませんでした。実はこの形式の地図データは、「フォルダ単位」で取り扱う必要があるので、フォルダ事ダウンロードしたデータをワーキングディレクトリ以下にコピーしてあげる必要があります。
library(tidyverse)
library(sf)
states <- sf::read_sf("../data/ne_10m_admin_1_states_provinces")
データの加工
読み込まれたstatesデータはtibble形式なのでtidyverse系のデータ加工が簡単に行えます
日本のデータにだけ絞り込んでみましょう
japan <- states %>% filter(adm0_a3 == 'JPN')
japan %>% head()
## Simple feature collection with 6 features and 121 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: 128.6004 ymin: 29.44335 xmax: 132.0841 ymax: 34.701
## Geodetic CRS: WGS 84
## # A tibble: 6 × 122
## featurecla scalerank adm1_code diss_me iso_3166_2 wikipedia
## <chr> <int> <chr> <int> <chr> <chr>
## 1 Admin-1 stat… 2 JPN-3501 3501 JP-46 <NA>
## 2 Admin-1 stat… 6 JPN-1835 1835 JP-44 <NA>
## 3 Admin-1 stat… 6 JPN-1829 1829 JP-40 <NA>
## 4 Admin-1 stat… 6 JPN-1827 1827 JP-41 <NA>
## 5 Admin-1 stat… 2 JPN-3500 3500 JP-42 <NA>
## 6 Admin-1 stat… 6 JPN-1830 1830 JP-43 <NA>
## # ℹ 116 more variables: iso_a2 <chr>, adm0_sr <int>,
## # name <chr>, name_alt <chr>, name_local <chr>, type <chr>,
## # type_en <chr>, code_local <chr>, code_hasc <chr>,
## # note <chr>, hasc_maybe <chr>, region <chr>,
## # region_cod <chr>, provnum_ne <int>, gadm_level <int>,
## # check_me <int>, datarank <int>, abbrev <chr>, postal <chr>,
## # area_sqkm <int>, sameascity <int>, labelrank <int>, …
読めました!
#write_rds(japan,"japan_pref_map.rds", compress="gz")
#オンラインコースではこのデータを利用しています。
できあがり!
これで、leafletを利用して、
library(leaflet)
leaflet(data = japan) %>%
addPolygons(fillColor = topo.colors(10, alpha = NULL),
stroke = FALSE) #ブログではうまく描画できませんでした。
#日本地図を動的に塗ったり、
ggplot(data = japan) + geom_sf()

ggplot2でgeom_sfに渡すだけで描画したりが簡単にできます!
この、geom_sfはかなり強力で、leaflet等、別のパッケージを利用して地図を描画する場合は、そのパッケージでの地図の描画のやり方を1から学ぶ必要がありますが、静的な地図を描画するだけであれば、通常のggplotと同じ感覚で図を描画できます。
例えば、上記の白地図で、大阪、東京、大分、高知、北海道に色を付けたい場合、
japan2 <- japan %>%
mutate(colorthis = name_ja %in% c("大阪府","東京都","大分県","高知県","北海道"))
ggplot(japan2) +
geom_sf(aes(fill = colorthis)) +
scale_fill_manual(values = c("grey","skyblue")) +
theme_classic()

Happy R Life!
コメント