1 目的

日本全体ではなく,一部の地方を示す.

  • NipponMapから一部の地方を切り抜く.
  • ここでは,地域区分として7地方区分(北海道地方,東北地方,関東地方,中部地方,近畿地方,中国・四国地方,九州地方)を考える.

ライブラリ:sftidyverseNipponMap

library(sf)
library(tidyverse)
library(NipponMap)

2 関東地方の可視化

シェープファイル

作業フォルダにjpn.shpなどが含まれるshapesと示されるフォルダがあることを前提とする.

  • Nippon_mapと名付け,read_sf()でデータを読込.
    • シェープファイルを作業フォルダに移すのが面倒だと思う場合は,Nippon_map<-以降のコマンドをread_sf(system.file("shapes/jpn.shp"), package="NipponMap")にしても可能.この場合,移す作業は必要ない.
  • head()を用いて上から6行を表示.
    • region列に地方区分が示される.Nipponmapは8地方区分. 
Nippon_map<-
  read_sf("shapes/jpn.shp", crs="WGS84")

Nippon_map %>% 
  head()
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()を用いる.
Nippon_map %>% 
  filter(region=="Kanto") ->
  Kanto_map

関東地方の可視化

関東地方が選抜されているか確認.

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は緯度(縦軸).
      • Rで,ポリゴン(面)へのラベル付け(アクセス日:2022-08-17)を参照.
  • 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")

人口分布

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_bw()

3 応用

3.1 その他の地方の可視化

その他の地方の地図も作成(コードは繰り返しのため一部のみ表記).

北海道地方,東北地方

中部地方

富山県と石川県のラベルが重なる.

  • 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による地理空間データの可視化