数値に基づくポリゴンの色分け(式による分類) | 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")) # 各グループの色を設定


ミサキ
ミサキ

今回のような簡単な分類は、前回のcut関数でも可能です。
また、この記事は、QGISのこちらの記事と対応しています。


この記事で使用した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よりも簡単かも知れませんね。
では。


YouTube: ミサキさん

問い合わせ先
Mail: caprico.aries@gmail.com
Twitter: https://twitter.com/caprico_aries(無言フォローもお気軽に)

コメント

  1. […] ・前回の地図を初期状態とします。・凡例調整の以下6つのサンプルを示します。 […]

  2. […] 作成する地図は、こちらの記事で作成した地図をベースにし、凡例のタイトルと位置を変更したものです。以下にソースコードを示します。記事とこのソースコードを基に、地図をibarakiに代入して下さい。 […]

  3. […] 数値に基づくポリゴンの色分け(自然分類) | R, GIS数値に基づくポリゴンの色分け(式による分類) | R, GIS […]

タイトルとURLをコピーしました