数値に基づくポリゴンの色分け(式による分類) | R, GIS
この記事では、Rで、式を使って数値を分類し、ポリゴンを色分けする方法について説明します。
記事の要点です。
処理の流れ:シェープファイルとCSVファイルを結合 -> 数値をグループ分け -> 描画
式を使ったグループ分けは、dplyrのcase_when関数を使う
factor関数でグループの順序(≠大小関係)を設定する
プログラム全体を示します。
## シェープファイルとCSVファイルを結合
library(sf)
shp <- st_read("./data/N03-20150101_08_GML", options = "ENCODING=SHIFT-JIS")
d <- read.csv("./data/csv_only/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)
ggplot(shpCsv) + geom_sf(aes(fill = cy2020Grp)) +
scale_fill_manual(values = c("#fb9a99", "#ffffff", "#a6cee3")) # 各グループの色を設定
この記事で使用したRとパッケージのバージョンを記載しておきます。
R 3.6.1
sf 0.7-6
dplyr 0.8.3
ggplot 3.2.0
数値に基づくポリゴンの色分け(式による分類)
CSVデータをシェープファイルに結合
こちらを参考にCSVデータをシェープファイルに結合します。
## シェープファイルとCSVファイルを結合
library(sf)
shp <- st_read("./data/N03-20150101_08_GML", options = "ENCODING=SHIFT-JIS")
d <- read.csv("./data/csv_only/kekkahyo1_ibaraki_2015-2045.csv")
library(dplyr)
shpCsv <- left_join(shp, d, by = c("N03_004" = "市区町村"))
色分けに使う値(2020年の推計人口)の式による分類
茨城県にある各市町村の2020年推計人口を式で分類します。
QGISの記事と対応づける為、2020年の人口が2015年の人口の
102%以上 → 「増加」
98%以上 102%未満 → 「横ばい」
98%未満 → 「減少」
というルールで、市町村を色分けします。
まず、dplyrのcase_when関数を使って、2020年推計人口を3グループに分けます。
x <- shpCsv$cy2020
xGrp <- case_when(x >= 102 ~ "増加",
x >= 98 & x < 102 ~ "横ばい",
x < 98 ~ "減少",
TRUE ~ NA_character_) # グループ分け
case_whenのところでは、各市町村の2020年推計人口一つ一つ(x)に対して、式を満たしたときに、対応する文字列(”増加”、”横ばい”、”減少”)を返しています。
欠損値のように、xがどの式も満さない場合は、欠損値(NA_character_)を返しています。
次に、グループの順序を設定します。
xGrp <- factor(xGrp, levels = c("増加", "横ばい", "減少")) # 順序(≠大小関係)を設定
こうすることで、描画したときの凡例の順序が、“増加”、”横ばい”、”減少”の順になります。
少し発展的な内容ですが、大小関係は設定していません(つまり、増加 > 横ばい などの式は評価できない)。
最後に、グループ分けした結果を、シェープファイルのcy2020Grpカラムに格納します。
shpCsv$cy2020Grp <- xGrp # cy2020Grpカラムに格納
いつものことながら、このようにデータセットができれば、ほぼ完了です。
描画
描画します。
library(ggplot2)
ggplot(shpCsv) + geom_sf(aes(fill = cy2020Grp)) +
scale_fill_manual(values = c("#fb9a99", "#ffffff", "#a6cee3")) # 各グループの色を設定
各グループの色はQGISで使ったのと同じ色を使っています。
順序を設定したので、“#fb9a99”, “#ffffff”, “#a6cee3″はそれぞれ、”増加”、”横ばい”、”減少”の色に対応しています。
また、市町村名の表示は、プログラムが複雑になるので行ないません。
以下のような地図が表示されれば完成です。
図
茨城県の2020年の推計人口(2015年と比較)
おわりに
お疲れさまでした。
数値のグループ分けに慣れると、Rの方がQGISよりも簡単かも知れませんね。