日本の都道府県白地図データを取得してggpotで描画する

目次

参考にした資料

D3.jsで日本地図を描き、都道府県別に色を塗る

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!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次