日本全体ではなく,一部の地方を示す.
NipponMap
から一部の地方を切り抜く.ライブラリ:sf
,tidyverse
,NipponMap
シェープファイル
作業フォルダにjpn.shp
などが含まれるshapes
と示されるフォルダがあることを前提とする.
Nippon_map
と名付け,read_sf()
でデータを読込.
Nippon_map<-
以降のコマンドをread_sf(system.file("shapes/jpn.shp"), package="NipponMap")
にしても可能.この場合,移す作業は必要ない.head()
を用いて上から6行を表示.
region
列に地方区分が示される.Nipponmap
は8地方区分. SP_ID | jiscode | name | population | region | geometry |
---|---|---|---|---|---|
1 | 01 | Hokkaido | 5506419 | Hokkaido | POLYGON ((139.7707 42.3018,… |
2 | 02 | Aomori | 1373339 | Tohoku | POLYGON ((140.8727 40.48187… |
3 | 03 | Iwate | 1330147 | Tohoku | POLYGON ((140.7862 39.85982… |
4 | 04 | Miyagi | 2348165 | Tohoku | POLYGON ((140.2802 38.01415… |
5 | 05 | Akita | 1085997 | Tohoku | POLYGON ((140.7895 39.86026… |
6 | 06 | Yamagata | 1168924 | Tohoku | POLYGON ((140.2802 38.01415… |
関東地方選抜
日本地図(Nippon_map
)から関東地方(region=="Kanto"
)を切り抜く.
filter()
を用いる.関東地方の可視化
関東地方が選抜されているか確認.
ggplot()+
geom_sf(data=Kanto_map,
aes(fill=name), color="white")+
scale_fill_viridis_d(option="G")+
labs(fill="")+
ggtitle("関東地方")+
theme_bw()
重心の計算
凡例ではなく,地図内に地名を記入するための準備.
centroid
)に描写.st_centroid()
:geometry
列の重心計算.centroid
とする.st_coordinates()
:作成したcentroid
から経度・緯度を取り出す.x
は経度(横軸),y
は緯度(縦軸).head()
を用いて上から6行を表示.
centroid
(重心),x
(経度),y
(緯度)の各列が作成されていることを確認.Kanto_map %>%
mutate(centroid=st_centroid(geometry),
x=st_coordinates(centroid)[, 1],
y=st_coordinates(centroid)[, 2]) ->
Kanto_map
Kanto_map %>%
head()
SP_ID | jiscode | name | population | region | geometry | centroid | x | y |
---|---|---|---|---|---|---|---|---|
8 | 08 | Ibaraki | 2969770 | Kanto | POLYGON ((139.7322 36.08471… | POINT (140.3258 36.33359) | 140.3258 | 36.33358 |
9 | 09 | Tochigi | 2007683 | Kanto | POLYGON ((139.4263 36.33584… | POINT (139.8236 36.68927) | 139.8236 | 36.68927 |
10 | 10 | Gunma | 2008068 | Kanto | POLYGON ((139.3836 36.35887… | POINT (138.9814 36.51011) | 138.9814 | 36.51011 |
11 | 11 | Saitama | 7194556 | Kanto | POLYGON ((139.5503 36.22628… | POINT (139.3505 35.99403) | 139.3505 | 35.99403 |
12 | 12 | Chiba | 6216289 | Kanto | POLYGON ((139.8892 35.73601… | POINT (140.2128 35.53531) | 140.2128 | 35.53531 |
13 | 13 | Tokyo | 13159388 | Kanto | POLYGON ((139.8562 35.77462… | POINT (139.4482 35.69422) | 139.4482 | 35.69422 |
都道府県名の可視化
geom_label()
:地図上にラベル(背景が白の文字)を作成.
aes()
に示したい位置(上で作成した重心を利用),示したい内容(label
)を示す.size
)を指示.ggplot()+
geom_sf(data=Kanto_map,
aes(fill=name), color="white")+
scale_fill_viridis_d(option="G")+
geom_label(data=Kanto_map,
aes(x=x, y=y, label=name),
size=3)+
labs(x="", y="")+
ggtitle("関東地方")+
theme_bw()+
theme(legend.position="none")
人口分布
その他の地方の地図も作成(コードは繰り返しのため一部のみ表記).
北海道地方,東北地方
中部地方
富山県と石川県のラベルが重なる.
geom_label_repel()
を利用して,これを回避.
library(ggrepel)
を呼び出す.必要に応じてライブラリをインストール(install.packages("ggrepel")
).#ラベルの重なりを避けるため
library(ggrepel)
#人口分布の可視化
ggplot()+
geom_sf(data=Chubu_map,
aes(fill=population/10000), color="white")+
scale_fill_viridis_c(option="G", direction=-1)+
geom_label_repel(data=Chubu_map,
aes(x=x, y=y, label=name),
size=3)+
labs(fill="万人", x="", y="",
caption="出典:NipponMap")+
ggtitle("中部地方")+
theme_bw()
近畿地方
中国・四国地方
NipponMap
では中国地方と四国地方が分かれている.
|
は「または」を意味する論理記号.#中国・四国地方の地図
Nippon_map %>%
filter(region=="Chugoku" | region=="Shikoku") ->
Chugoku_map
#人口分布の可視化
ggplot()+
geom_sf(data=Chugoku_map,
aes(fill=population/10000), color="white")+
geom_label(data=Chugoku_map,
aes(x=x, y=y, label=name),
size=3)+
scale_fill_viridis_c(option="G", direction=-1)+
labs(fill="万人", x="", y="",
caption="出典:NipponMap")+
ggtitle("中国・四国地方")+
theme_bw()
九州地方
沖縄県が九州から南西方向に離れているため,沖縄県のジオメトリ(ポリゴン)を移動.
#九州地方地図
Nippon_map %>%
filter(region=="Kyushu / Okinawa") ->
Kyushu_map
#沖縄のジオメトリの変更(Kyushu_mapの8行目)
Kyushu_map$geometry[8]=Kyushu_map$geometry[8]+c(1, 5)
#重心の経度・緯度の作成
Kyushu_map %>%
mutate(centroid=st_centroid(geometry),
x=st_coordinates(centroid)[, 1],
y=st_coordinates(centroid)[, 2]) ->
Kyushu_map
#人口分布の可視化
ggplot()+
geom_sf(data=Kyushu_map,
aes(fill=population/10000), color="white")+
geom_label(data=Kyushu_map,
aes(x=x, y=y, label=name),
size=3)+
scale_fill_viridis_c(option="G", direction=-1)+
annotate("segment", x=128.6, xend=129.3,
y=32.1, yend=32.1,
color="gray", linewidth=1)+
annotate("segment", x=129.3, xend=129.7,
y=32.1, yend=31.4,
color="gray", linewidth=1)+
labs(fill="万人", x="", y="",
caption="出典:NipponMap")+
ggtitle("九州地方")+
theme_bw()
参考ウェブサイト
Rによる地理空間データの可視化