最近、知ったパッケージが熱い。{svgPanZoom}はRの静的なはずのプロットをインタラクティブに拡大縮小してくれるパッケージで、Shinyやjavascript + R関係の有用記事をばんばん出している @timelyportfolio さん作だ。また{viridis}は可視性に優れるMatplotlibのカラーパレットviridisをRで使えるようにするものでSwarm Labのボス Simon Garnier 作のパッケージ。地図のグラデーションを表現する手法として今後流行っていくだろう。そしてキャップこと @hrbrmstrProject Lineworkが提供する地図を{ggplot2}の使い方で使えるようにしたパッケージ{lineworkmaps}を作ってくれた。

それぞれ特徴があって便利なのだけど、これをあわせたら面白いことができそうだと思ったのでやってみた。{choroplethr}にある日本の人口動態データを地図に描いてみる。塗り分け図を気楽に作成できるこのパッケージも実際クール!

# 必要なパッケージ群を読み込む
library(dplyr)
library(stringr)

library(lineworkmaps) # devtools::install_github("hrbrmstr/lineworkmaps")
library(sp)
library(ggplot2)
library(ggthemes)

library(choroplethr)

library(viridis)

library(svgPanZoom)
library(SVGAnnotation)
## Loading required package: Cairo
## Loading required package: XML
elmer <- linework_map(linework_set = "elmer_casual", fortified = TRUE)
# linework_map で日本を描画するためには引数linework_setでelmer_casualを指定する
jp <- elmer[elmer$COUNTRY == "JP" & elmer$Name != "Japan",]
# 日本地図のデータ(topojsonで書かれた地図)

data("df_japan_census")
# {choroplethr}内のデータセットを用意する
df_japan_census %<>% 
  mutate(., Name = str_replace(string = region, 
            pattern = "[:lower:]", 
            replacement = toupper(str_sub(df_japan_census$region, start = 1, end = 1)))) %>% 
  left_join(., jp)
## Joining by: "Name"
## Warning in left_join_impl(x, y, by$x, by$y): joining factor and character
## vector, coercing into character vector
# 地図データと人口動態データを結合
# df_japan_censusとjpオブジェクトで都道府県名の表示が異なるのるので統一する
svgPanZoom(svgPlot(show(ggplot() + 
              geom_map(data = jp, map = jp,
                    aes(x = long, y = lat, map_id = id), size = 0.5) +
              geom_map(data = df_japan_census, map = jp,
                       aes(fill = pop_2010, map_id = id)) +
              scale_fill_viridis() +
              coord_map(project = "albers", lat0 = 47.5, lat1 = 28.5) +
              labs(title = "Japanese Population Census"))), 
           controlIconsEnabled = TRUE,
           width = 800, height = 700)