日本全体ではなく,一部の地方を示す.
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 | MULTIPOLYGON (((139.7707 42… |
2 | 02 | Aomori | 1373339 | Tohoku | MULTIPOLYGON (((140.8727 40… |
3 | 03 | Iwate | 1330147 | Tohoku | MULTIPOLYGON (((140.7862 39… |
4 | 04 | Miyagi | 2348165 | Tohoku | MULTIPOLYGON (((140.2802 38… |
5 | 05 | Akita | 1085997 | Tohoku | MULTIPOLYGON (((140.7895 39… |
6 | 06 | Yamagata | 1168924 | Tohoku | MULTIPOLYGON (((140.2802 38… |
関東地方選抜
日本地図(Nippon_map
)から関東地方(region=="Kanto"
)を選抜.
-
選抜・可視する方法は2つ.filter()
を用いて,日本地図から関東地方だけを選抜したオブジェクトをつくり,それを可視する方法と,可視する際にsubset()
を用いて関東地方だけを選抜するように条件付けする方法.
関東地方の可視化1
filter()
を用いた場合
Kanto_map
を作成.ggplot()+
geom_sf(data=Kanto_map,
aes(fill=name), color="white")+
scale_fill_viridis_d(option="G")+
labs(fill="")+
ggtitle("関東地方1")+
theme_void()
関東地方の可視化2
subset()
を用いた場合
ggplot()+
geom_sf(data=subset(Nippon_map, region=="Kanto"),
aes(fill=name), color="white")+
scale_fill_viridis_d(option="G")+
labs(fill="")+
ggtitle("関東地方2")+
theme_void()
重心の計算
凡例ではなく,地図内に地名を記入するための準備.
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 | MULTIPOLYGON (((139.7322 36… | POINT (140.3258 36.33359) | 140.3258 | 36.33358 |
9 | 09 | Tochigi | 2007683 | Kanto | MULTIPOLYGON (((139.4263 36… | POINT (139.8236 36.68927) | 139.8236 | 36.68927 |
10 | 10 | Gunma | 2008068 | Kanto | MULTIPOLYGON (((139.3836 36… | POINT (138.9814 36.51011) | 138.9814 | 36.51011 |
11 | 11 | Saitama | 7194556 | Kanto | MULTIPOLYGON (((139.5503 36… | POINT (139.3505 35.99403) | 139.3505 | 35.99403 |
12 | 12 | Chiba | 6216289 | Kanto | MULTIPOLYGON (((139.8892 35… | POINT (140.2128 35.53531) | 140.2128 | 35.53531 |
13 | 13 | Tokyo | 13159388 | Kanto | MULTIPOLYGON (((139.8562 35… | 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)+
ggtitle("関東地方")+
theme_void()+
theme(legend.position="none")
人口分布
ggplot()+
geom_sf(data=Kanto_map,
aes(fill=population/10000), color="white")+
scale_fill_viridis_c(option="G", direction=-1)+
geom_label(data=Kanto_map,
aes(x=x, y=y, label=name),
size=3)+
labs(fill="万人", x="", y="",
caption="出典:NipponMap")+
ggtitle("関東地方の人口分布")+
theme_void()
その他の地方の地図も作成(コードは繰り返しのため一部のみ表記).
北海道地方,東北地方
中部地方
富山県と石川県のラベルが重なる.
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_void()
近畿地方
中国・四国地方
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_void()
九州地方
沖縄県が九州から南西方向に離れているため,沖縄県のジオメトリ(ポリゴン)を移動.
#九州地方地図
Nippon_map %>%
filter(region=="Kyushu / Okinawa") ->
Kyushu_map
#沖縄のジオメトリの変更
Kyushu_map <- Kyushu_map %>%
mutate(geometry=replace(
geometry, SP_ID==47,
geometry[SP_ID==47]+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_void()
参考ウェブサイト
Rによる地理空間データの可視化
Rでポリゴン(面)へのラベル付け(アクセス日:2025-03-01)を参照(重心の抜き出し方は以前と変更されている模様のため,ここに記しているR
コードと若干異なる)↩︎