Rで描いた地図にスケールバーを追加する方法
この記事では、Rで描いた地図へ、スケールバーを追加する方法について説明します。
![](https://assets.st-note.com/img/1678620900705-K1D1fjRZbf.png)
記事の概要です。
スケールバーを追加するためにggsnパッケージをインストールします。
茨城県の地図を作成します。
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 # 一旦、スケールバー無しで描画
![](https://assets.st-note.com/img/1678620924823-0qS5rMkrRT.png?width=1200)
スケールバーの追加
では、スケールバーを追加します。
スケールバーの追加には、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引数はシェープファイルの仕様を確認する必要があります。
以下の地図が表示されれば、完了です。
![](https://assets.st-note.com/img/1678620939888-UcCdPpFDVp.png?width=1200)
おわりに
お疲れさまでした。
地図さえ描けていれば、スケールバーの追加は簡単ですね!
次回は方位記号を追加します。