地物としてのCSV読み込み&描画 | R, GIS

この記事では、Rを使ったポイントマップの作成方法について説明します。

記事の概要です。

  1. 茨城県のシェープファイルからつくば市を取り出します。

  2. つくば市の指定緊急避難場所のCSVデータを読み込みます。

  3. つくば市の地図を描画し、その上に指定緊急避難場所をプロットします。

つくば市の地図に指定緊急避難場所をプロットする部分のソースです。

ggplot(shp) + geom_sf() + geom_point(data = csv, aes(x = fX, y = fY))

geom_sf()までの部分でつくば市の地図が描画され、geom_pointにより指定緊急避難場所がプロットされます。

こちらはソースコード全体です。

## データ読み込み: 茨城県のシェープファイル
library(sf)
shp <- st_read("./data/N03-20150101_08_GML", options = "ENCODING=SHIFT-JIS")

## つくば市のみにする
shp <- shp %>% filter(N03_004 == "つくば市")

library(ggplot2)
ggplot(shp) + geom_sf() # 確認のため描画


## データ読み込み: つくば市の指定緊急避難場所
csv <- read.csv("./data/指定緊急避難場所_つくば市(緯度経度付き).csv")

head(csv) # 確認


## 描画
ggplot(shp) + geom_sf() + geom_point(data = csv, aes(x = fX, y = fY))

## 描画: ラベル付与
ggplot(shp) + geom_sf() + geom_point(data = csv, aes(x = fX, y = fY)) +
    geom_label(data = csv, aes(x = fX, y = fY, label = col0),
               vjust = 1, # ラベル上端のY座標をfYにする(0: 下端のY座標をfYにする)
               nudge_y = -0.003) # 下方向に少し(-0.003度)ずらす

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

  • R 3.6.1

  • sf 0.7-6

  • dplyr 0.8.3

  • ggplot 3.2.0

つくば市の地図を作成

この記事では、つくば市の地図に指定緊急避難場所をプロットします。
指定緊急避難場所については、こちらの記事で簡単に説明しています。

まずは、つくば市の地図を作成しましょう。

しかし、適当なつくば市のシェープファイルが見つかりませんでした。
そのため、これまで使ってきた茨城県のシェープファイルから、つくば市の部分を取り出すことにします。

もし、茨城県のシェープファイルが無い場合は、こちらを参考にしてダウンロードして下さい。

では、茨城県のシェープファイルを読み込みます。

## データ読み込み: 茨城県のシェープファイル
library(sf)
shp <- st_read("./data/N03-20150101_08_GML", options = "ENCODING=SHIFT-JIS")

つくば市の部分を取り出します。

## つくば市のみにする
shp <- shp %>% filter(N03_004 == "つくば市")

これは、表形式のデータから特定行を抽出する方法と同じ考え方です。
市町村のポリゴンデータが、shpの中に行単位で入っている状態をイメージして下さい。
市町村名が格納されているカラム(N03_004)を使って、そこでの値が”つくば市”となる行(ボリゴンデータ)を抽出しています。

確認のため、描画してみましょう。

library(ggplot2)
ggplot(shp) + geom_sf() # 確認のため描画
取り出した「つくば市」の地図

指定緊急避難場所の読み込み

指定緊急避難場所を読み込みます。

下記リンクからCSVファイル(指定緊急避難場所つくば市(緯度経度付き).csv)をダウンロードして下さい。

ダウンロードしたCSVファイルを読み込みます。

## データ読み込み: つくば市の指定緊急避難場所
csv <- read.csv("./data/指定緊急避難場所_つくば市(緯度経度付き).csv")

確認します。

head(csv) # 確認
              col0                  col1                       LocName       fX
1   さくら運動公園      つくば市流星台63               茨城県/つくば市 140.1279
2     茎崎運動公園 つくば市下岩崎2160-10        茨城県/つくば市/下岩崎 140.1057
3         大池公園    つくば市北条1477-1          茨城県/つくば市/北条 140.0955
4         川口公園      つくば市上郷3190          茨城県/つくば市/上郷 140.0155
5 研究学園駅前公園     つくば市学園南2-1 茨城県/つくば市/学園南/二丁目 140.0822
6     筑波北部公園         つくば市北原1          茨城県/つくば市/北原 140.0495
        fY iConf iLvl
1 36.09237     3    3
2 35.97381     5    5
3 36.17425     5    5
4 36.09675     5    5
5 36.07891     5    6
6 36.15321     5    5

col0が指定緊急避難場所の名称で、fXが経度、fYが緯度を表しています。

ちなみに、このデータは、こちらこちらの記事で作成したものです。
ご参考まで。

つくば市の地図に指定緊急避難場所をプロット

では、つくば市の地図に指定緊急避難場所をプロットしましょう。

## 描画
ggplot(shp) + geom_sf() + geom_point(data = csv, aes(x = fX, y = fY))
つくば市の地図に指定緊急避難場所をプロット

シンプルですよね。

ggplot(shp) + geom_sf()

で、つくば市の地図を描画し、その上に、指定緊急避難場所のプロット

geom_point(data = csv, aes(x = fX, y = fY))

を重ねる、そんなイメージです。

ggplot2はこのようにレイヤーを重ねることで、グラフを描画していきます。

あと、点だけでは、どこがどの指定緊急避難場所か分からないので、ラベルを表示させましょう。

## 描画: ラベル付与
ggplot(shp) + geom_sf() + geom_point(data = csv, aes(x = fX, y = fY)) +
    geom_label(data = csv, aes(x = fX, y = fY, label = col0),
               vjust = 1, # ラベル上端のY座標をfYにする(0: 下端のY座標をfYにする)
               nudge_y = -0.003) # 下方向に少し(-0.003度)ずらす

geom_labelによって、ラベルのレイヤーが追加されました。

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

ラベル(指定緊急避難場所の名称)を追加

おわりに

お疲れさまでした。
QGISとの共通点は、レイヤーを重ねて描画していく点ですね。
ただ、QGISは緯度経度を意味するカラムの指定が必要な分、Rの方がちょっと簡単かも知れませんね。

いいなと思ったら応援しよう!