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 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を作成.
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("関東地方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()

重心の計算

凡例ではなく,地図内に地名を記入するための準備.

  • 地図上に記入する場合は,記入したい位置の経度・緯度(座標)を示す必要がある.
    • ここでは,各都道府県の重心centroid)に描写.1
    • 都道府県のジオメトリ(ポリゴンデータ)から重心(ポイントデータ)の経度・緯度を計算する方法は以下の通り.
      • st_centroid()geometry列の重心計算.centroidとする.
      • st_coordinates():作成したcentroidから経度・緯度を取り出す.xは経度(横軸),yは緯度(縦軸).
      • [, 1]1列目(x)だけを抽出.
      • [, 2]2列目(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 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()

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


  1. Rでポリゴン(面)へのラベル付け(アクセス日:2025-03-01)を参照(重心の抜き出し方は以前と変更されている模様のため,ここに記しているRコードと若干異なる)↩︎