1 目的

Natural Earthは世界各国の無料のベクターデータ(ポイント(点),ライン(線),ポリゴン(面)で地理空間情報を表現)を提供.ここでは,世界の所得分布,ヨーロッパ州の人口分布を示す.世界の所得分布については,座標参照系を変えて,地図を描写する方法も紹介.

  • Natural Earthのデータを扱うパッケージが用意されているため,それを利用する.
    • 数値データなどの属性情報も含まれるため,コロプレス図(階級区分図)を作成可能.
    • パッケージをインストールする場合はinstall.packages("rnaturalearth")

パッケージ:sftidyversernaturalearth

library(sf)
library(tidyverse)

#Natural Earth 
library(rnaturalearth)

2 世界地図

世界地図の読込

世界地図を可視化.

  • ne_countries()で読込.
    • 地図の解像度(scale)はmiddleを指示.
    • オブジェクトをWorld_mapとする.
    • World_mapは地物(マルチポリゴン)とその属性(地理空間情報を含む)をもつsfオブジェクト(class(World_map)Rコードで確認可能).
World_map<-
  ne_countries(scale="medium")

とりあえず,世界地図を可視化.

  • 座標参照系(CRS)として地理座標系EPSG:4326(WGS84)を適用.
    • 座標参照系は地球を球体とみなした地理座標系(緯度,経度)と,地球を平面に投影した投影座標系がある.
  • (アジアー太平洋が中心にくる)見慣れた地図ではないが,これは経度0度が縦軸の中心(本初子午線)に描かれているため.
    • 緯度0度が横軸の中心(赤道).
    • 高緯度に位置する地物ほど横に広がる(南極が横に広がったり,緯度が相対的に高いグルーランドが相対的に低いオーストリアと同じような大きさに.)
    • アジアー太平洋中心の地図は下記のアジアー太平洋中心を参照.
ggplot()+
  geom_sf(data=World_map)+
  theme_bw()

データの中身

#最初の6行
World_map %>% 
  head()

3 世界地図上への所得分布の可視化

上の表を右側に進むと,所得を階級分けした列(income_grp)が現れる.

  • とりあえず,世界地図上へこれを可視化.
    • 各国の枠(color)は白(white)に指示.
  • 凡例を図の下に移動(legend.position="bottom")し,2行にする(guide_legend(nrow=2)).
  • 出典を地図の隅に示す(caption).
ggplot()+
  geom_sf(data=World_map, aes(fill=income_grp), 
          color="white")+
  scale_fill_viridis_d(option="G")+
  labs(fill="所得グループ",
       caption="出典:Natural Earth")+
  ggtitle("世界の所得分布")+
  theme_bw()+
  theme(legend.position="bottom")+
  guides(fill=guide_legend(nrow=2))

4 応用

4.1 投影座標系の適用

投影座標系を適用した座標参照系(CRS)に基づき,世界地図に所得分布を可視化.

4.1.1 ロビンソン図法

  • 見た目が良く,世界地図に用いられる投影法の1つであるロビンソン図法(Robinson projection)を利用.
    • coord_sf()+proj=robinを指示.robinはロビンソン図法のこと.
      • ESRI:54030に対応.
      • World Map(アクセス日:2022-08-15)のBasic Examplesを参照した.
ggplot()+
  geom_sf(data=World_map, aes(fill=income_grp), 
          color="white", size=0.001)+
  scale_fill_viridis_d(option="G")+
  labs(fill="所得グループ",
       caption="出典:Natural Earth")+
  ggtitle("世界の所得分布(ロビンソン図法)")+
  theme_bw()+
  coord_sf(crs="+proj=robin")+
  theme(legend.position="bottom")+
  guides(fill=guide_legend(nrow=2))

4.1.2 モルワイデ図法

  • モルワイデ図法:面積を正しく表現する地図投影法.
    • 形状は歪む.特に地図の周辺部.
      • moll:モルワイデ図法.
ggplot()+
  geom_sf(data=World_map, aes(fill=income_grp), 
          color="white", size=0.001)+
  scale_fill_viridis_d(option="G")+
  labs(fill="所得グループ",
       caption="出典:Natural Earth")+
  ggtitle("世界の所得分布(モルワイデ図法)")+
  theme_bw()+
  coord_sf(crs="+proj=moll")+
  theme(legend.position="bottom")+
  guides(fill=guide_legend(nrow=2))

4.1.3 ランベルト正積方位図法

  • ランベルト正積方位図法(Lambert equal area azimuthal projection, laea)を利用.
    • 面積は正しく保たれるが,形状は歪む傾向.
    • coord_sf()crsEPSG:3035(ヨーロッパ州中心)と指示. 
    • EPSG:3035
    • "+proj=laea +lat_0=52 +lon_0=10"でもよい.
ggplot() +
  geom_sf(data=World_map, aes(fill=income_grp), 
          color="white") +
  scale_fill_viridis_d(option="G") +
  labs(fill="所得グループ", caption="出典:Natural Earth") +
  ggtitle("世界の所得分布(ランベルト正積方位図法)") +
  theme_bw() +
  coord_sf(crs=st_crs("EPSG:3035"))+ 
  theme(legend.position="bottom") +
  guides(fill=guide_legend(nrow=2))

4.1.4 アジアー太平洋中心

イコールアース図法

  • 次に中心を本初子午線ではなく,アジアー太平洋を中心とした地図(イコールアース図法)に変更.
    • イコールアース図法はロビンソン図法に近い形状.
  • 可視化すると,グリーンランドが横に広がりすぎるので,この地図では削除.
World_map %>% 
  filter(iso_a3!="GRL") ->
  Asia_Pacific_map 
  • ESRI:53037(EPSGの場合8859).
    • coord_sf()crsESRI:53037と指示.

アジアー太平洋を中心とした地図の可視化 

ggplot()+
  geom_sf(data=Asia_Pacific_map, aes(fill=income_grp), 
          color="white")+
  scale_fill_viridis_d(option="G")+
  labs(fill="所得グループ",
       caption="出典:Natural Earth")+
  ggtitle("世界の所得分布(アジアー太平洋中心)")+
  theme_bw()+
  coord_sf(crs=st_crs("ESRI:53037"))+
  theme(legend.position="bottom")+
  guides(fill=guide_legend(nrow=2))

ランベルト正積方位図法

  • アジアー太平洋中心のランベルト正積方位図法(laea)に対応する EPSGコードは存在しない模様.
    • そこで,Geocomputation with R7.9 カスタム地図投影法(アクセス日:2025-03-01)を参考に中心点を東京方向へ移動.
      • laea:ランベルト正積方位図法.
      • +lon_0=140 +lat_0=36:経度(東経)140°,緯度(北緯)36°方向へ.
ggplot() +
  geom_sf(data=World_map, aes(fill=income_grp), 
          color="white") +
  scale_fill_viridis_d(option="G") +
  labs(fill="所得グループ",
       caption="出典:Natural Earth") +
  ggtitle("世界の所得分布(ランベルト正積方位図法)") +
  theme_void() +
  coord_sf(crs=st_crs(
    "+proj=laea +lon_0=140 +lat_0=36")) +
  theme(legend.position="bottom") +
  guides(fill=guide_legend(nrow=2))

4.2 ヨーロッパ州の人口分布

ヨーロッパ州の選抜

世界地図からヨーロッパ州に属する国を切り抜く(filter()).

  • 大陸の識別は上の表でcontinentの列.
    • Europe_mapと名付ける.
World_map %>% 
  filter(continent=="Europe") ->
  Europe_map

ヨーロッパ州地図

国名(英字2桁の国名コード)を記した地図を作成する.

  • Rコードは示さない.

人口分布

上の表を右側に進むと,人口(人)を示す(pop_est)が現れる.

  • これを可視化.
    • 人口は100万で割り,単位を百万人にする.
ggplot()+
  geom_sf(data=Europe_map, aes(fill=pop_est/1000000),
          color="white")+
  scale_fill_viridis_c(option="G", direction=-1)+
  labs(fill="百万人",
       caption="出典:Natural Earth")+
  ggtitle("ヨーロッパ州の人口分布")+
  coord_sf(xlim = c(-25,50), ylim = c(35,70))+
  theme_void()

参考ウェブサイト

私たちのR: ベストプラクティスの探究20.11.1 世界地図(アクセス日:2022-08-14)

World Map–Basic Example(アクセス日:2022-08-15)

Geocomputation with R7.9 カスタム地図投影法(アクセス日:2025-03-01)

Rによる地理空間データの可視化

アイコン

Font Awesome 6.7.2

生成AIの使用について

ChatGPTのサービスを利用した後,内容を確認し,必要に応じて編集を行った.