Rで描いた地図にスケールバーを追加する方法

この記事では、Rで描いた地図へ、スケールバーを追加する方法について説明します。

スケールバー

記事の概要です。

  1. スケールバーを追加するためにggsnパッケージをインストールします。

  2. 茨城県の地図を作成します。

  3. ggsnパッケージのscalebar関数を使い、スケールバーを追加します。

スケールバーを追加する部分です。

## スケールーバーを追加して描画
library(ggsn)
ibaraki + scalebar(shpCsv,           # シェープファイル
                   dist      = 15,   # 1メモリが表す距離
                   dist_unit = "km", # 距離の単位
                   transform = TRUE, # 地図の座標が緯度・経度の場合TRUE
                   model     = "GRS80", # 楕円体モデル。シェープファイルに依存。
                   location  = "bottomleft") # "topright", "bottomright", "bottomleft", "topleft"

ソースコード全体です。

## シェープファイルとCSVファイルを結合

library(sf)
shp <- st_read("./data/N03-20150101_08_GML", options = "ENCODING=SHIFT-JIS")

d <- read.csv("./data/kekkahyo1_ibaraki_2015-2045.csv")

library(dplyr)
shpCsv <- left_join(shp, d, by = c("N03_004" = "市区町村"))

## 2020年の推計人口を、3グループ(増加、横ばい、減少)に分ける

x <- shpCsv$cy2020
xGrp <- case_when(x >= 102 ~ "増加",
                  x >= 98 & x < 102 ~ "横ばい",
                  x < 98 ~ "減少",
                  TRUE ~ NA_character_) # グループ化
xGrp <- factor(xGrp, levels = c("増加", "横ばい", "減少")) # 順序(≠大小関係)を設定
shpCsv$cy2020Grp <- xGrp # cy2020Grpカラムに格納

## 地図を ibaraki に代入

library(ggplot2)
ibaraki <- ggplot(shpCsv) + geom_sf(aes(fill = cy2020Grp)) +
    scale_fill_manual("2020年の推計人口", values = c("#fb9a99", "#ffffff", "#a6cee3")) +
    theme(legend.position = c(0.2, 0.8)) # 左下は 0, 0、右上は 1, 1

ibaraki                                  # 一旦、スケールバー無しで描画

## スケールーバーを追加して描画
library(ggsn)
ibaraki + scalebar(shpCsv,           # シェープファイル
                   dist      = 15,   # 1メモリが表す距離
                   dist_unit = "km", # 距離の単位
                   transform = TRUE, # 地図の座標が緯度・経度の場合TRUE
                   model     = "GRS80", # 楕円体モデル。シェープファイルに依存。
                   location  = "bottomleft") # "topright", "bottomright", "bottomleft", "topleft"

この記事で使用したRとパッケージのバージョンを記載しておきます。

  • R 3.6.1

  • sf 0.7-6

  • dplyr 0.8.3

  • ggplot 3.2.0

  • ggsn 0.5.0

準備:ggsnパッケージのインストール

ggsnパッケージをインストールします。

このパッケージは、ggplot2などで描いた地図にスケールバーと方位記号を追加するパッケージです。

方位記号を追加するときにも使いますので、ぜひインストールを!

インストールの仕方は、こちらを参考にして下さい。

準備:茨城県の地図を作成

スケールバーを追加する地図を作成します。

作成する地図は、こちらの記事で作成した地図をベースにし、凡例のタイトルと位置を変更したものです。
以下にソースコードを示します。

記事とこのソースコードを基に、地図をibarakiに代入して下さい。

## シェープファイルとCSVファイルを結合

library(sf)
shp <- st_read("./data/N03-20150101_08_GML", options = "ENCODING=SHIFT-JIS")

d <- read.csv("./data/kekkahyo1_ibaraki_2015-2045.csv")

library(dplyr)
shpCsv <- left_join(shp, d, by = c("N03_004" = "市区町村"))

## 2020年の推計人口を、3グループ(増加、横ばい、減少)に分ける

x <- shpCsv$cy2020
xGrp <- case_when(x >= 102 ~ "増加",
                  x >= 98 & x < 102 ~ "横ばい",
                  x < 98 ~ "減少",
                  TRUE ~ NA_character_) # グループ化
xGrp <- factor(xGrp, levels = c("増加", "横ばい", "減少")) # 順序(≠大小関係)を設定
shpCsv$cy2020Grp <- xGrp # cy2020Grpカラムに格納

## 地図を ibaraki に代入

library(ggplot2)
ibaraki <- ggplot(shpCsv) + geom_sf(aes(fill = cy2020Grp)) +
    scale_fill_manual("2020年の推計人口", values = c("#fb9a99", "#ffffff", "#a6cee3")) +
    theme(legend.position = c(0.2, 0.8)) # 左下は 0, 0、右上は 1, 1

一旦、スケールバーなしで描画してみましょう。

ibaraki                                  # 一旦、スケールバー無しで描画
茨城県の地図(スケールバーなし)

スケールバーの追加

では、スケールバーを追加します。

スケールバーの追加には、ggsnパッケージのscalebar関数を使います。

## スケールーバーを追加
library(ggsn)
ibaraki + scalebar(shpCsv,           # シェープファイル
                   dist      = 15,   # 1メモリが表す距離
                   dist_unit = "km", # 距離の単位
                   transform = TRUE, # 地図の座標が緯度・経度の場合TRUE
                   model     = "GRS80", # 楕円体モデル。シェープファイルに依存。
                   location  = "bottomleft") # "topright", "bottomright", "bottomleft", "topleft"

各引数の意味は、コメントから理解いただけると思います。
model引数はシェープファイルの仕様を確認する必要があります。

以下の地図が表示されれば、完了です。

茨城県の地図(スケールバーあり)

おわりに

お疲れさまでした。
地図さえ描けていれば、スケールバーの追加は簡単ですね!
次回は方位記号を追加します。

この記事が気に入ったらサポートをしてみませんか?