地物としてのCSV読み込み&描画 | R, GIS
この記事では、Rを使ったポイントマップの作成方法について説明します。
記事の概要です。
茨城県のシェープファイルからつくば市を取り出します。
つくば市の指定緊急避難場所のCSVデータを読み込みます。
つくば市の地図を描画し、その上に指定緊急避難場所をプロットします。
つくば市の地図に指定緊急避難場所をプロットする部分のソースです。
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の方がちょっと簡単かも知れませんね。