Rで描いた地図に方位記号を追加する方法
この記事では、Rで描いた地図に方位記号を追加する方法について説明します。
記事の概要です。
方位記号を追加するためにggsnパッケージをインストールします。
茨城県の地図を作成します。
ggsnパッケージのnorth2関数を使い、方位記号を追加します。
方位記号を追加する部分です。
## 方位記号を追加
north2(ibaraki,
x = .825, # 横方向の位置(0-1)
y = .5, # 縦方向の位置(0-1)
scale = .15, # 方位記号のサイズ(0-1)
symbol = 3) # 方位記号の種類(1-18)
こちらはソースコード全体です。
## シェープファイルと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カラムに格納
## 描画
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
## スケールーバーを追加
library(ggsn)
ibaraki <- ibaraki + scalebar(shpCsv, # シェープファイル
dist = 15, # 1メモリが表す距離
dist_unit = "km", # 距離の単位
transform = TRUE, # 地図の座標が緯度・経度の場合TRUE
model = "GRS80", # 楕円体モデル。シェープファイルに依存。
location = "bottomleft") # "topright", "bottomright", "bottomleft", "topleft"
ibaraki # 方位記号なしで描画
## 方位記号を追加
north2(ibaraki,
x = .825, # 横方向の位置(0-1)
y = .5, # 縦方向の位置(0-1)
scale = .15, # 方位記号のサイズ(0-1)
symbol = 3) # 方位記号の種類(1-18)
## 方位記号一覧
northSymbols()
この記事で使用したRとパッケージのバージョンを記載しておきます。
R 3.6.1
sf 0.7-6
dplyr 0.8.3
ggplot 3.2.0
ggsn 0.5.0
準備:ggsnパッケージのインストール
ggsnパッケージをインストールします。
このパッケージにつては、こちらで簡単に説明しています。
インストールの仕方は、こちらを参考にして下さい。
準備:茨城県の地図を作成
方位記号を追加する地図を作成します。
作成するのは、こちらの記事で作成した、スケールバー付きの地図です。
以下にソースコードを示します。
記事とこのソースコードを基に、地図を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カラムに格納
## 描画
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
## スケールーバーを追加
library(ggsn)
ibaraki <- ibaraki + scalebar(shpCsv, # シェープファイル
dist = 15, # 1メモリが表す距離
dist_unit = "km", # 距離の単位
transform = TRUE, # 地図の座標が緯度・経度の場合TRUE
model = "GRS80", # 楕円体モデル。シェープファイルに依存。
location = "bottomleft") # "topright", "bottomright", "bottomleft", "topleft"
一旦、方位記号なしで描画してみましょう。
ibaraki # 方位記号なしで描画
方位記号の追加
では、方位記号を追加します。
方位記号の追加には、ggsnパッケージのnorth2関数を使います。
## 方位記号を追加
north2(ibaraki,
x = .825, # 横方向の位置(0-1)
y = .5, # 縦方向の位置(0-1)
scale = .15, # 方位記号のサイズ(0-1)
symbol = 3) # 方位記号の種類(1-18)
実は、”north“という関数でも方位記号を追加できます。
しかし、位置の選択肢が、“topright” (default), “bottomright”, “bottomleft” and “topleft” の4つしかないため、今回は使用しませんでした。
使い方は、
?north
を実行するとヘルプが表示されるので、気になる方はご覧になって下さい。
また、方位記号は全部で18種類あります。
## 方位記号一覧
northSymbols()
以下の地図が表示されれば、完了です。
おわりに
お疲れさまでした。
地図の背景を”なし”(ブランクテーマ)にすると、より本格的になりそうですね。
ggsnのblank関数で実現できるので、試してみて下さい。