国土数値情報のDID人口集中地区(ポリゴンデータ)を用いて国内の人口分布を可視化(コロプレスマップ).また,ポリゴンデータからポイントデータを導き,バブルマップを作成.
cowplot
になる.インストールが必要な場合は(install.packages("cowplot")
).ライブラリ:sf
,tidyverse
,rnaturalearth
,cowplot
シェープファイルのダウンロード
最初に,背景になる日本地図のシェープファイルをダウンロード.
World_map
)から日本地図(Japan_map
)を切り抜き.読込のRコードがいつもと異なるため,注意. World_map<-
ne_countries(scale="medium", returnclass="sf")
#日本の選抜
World_map %>%
filter(brk_name=="Japan") ->
Japan_map
次に,2015年の人口集中地区データをダウンロード.
国土数値情報ダウンロードサービス > DID人口集中地区(ポリゴン) > 全国 > 世界測地系 平成27年
read_sf
:データ読込.DID_map
と名付ける.crs="WGS84"
はcrs
(Coordinate
ReferenceSystem,座標参照系)を1984年に定められた世界測地系(World
Geodetic
System)に投影を意味.日本地図(Japan_map
)とcrs
を揃える.options="ENCODING=CP932"
:文字化けを防ぐため.以下の2つの人口集中地区を削除.
#所属未定地のため削除
DID_map %>%
filter(A16_001!=1200001) ->
DID_map
#東員町の削除
DID_map %>%
filter(A16_001!=2432401) ->
DID_map
人口集中地区の位置を可視化
日本地図に比べ人口集中地区のポリゴンが相対的に小さいことに注意.ポリゴンが点(ポイント)のように見える.
ggplot()+
geom_sf(data=Japan_map, fill="white")+
geom_sf(data=DID_map)+
ggtitle("国内の人口集中地区")+
theme_bw()
人口密度の計算
A16_005
,単位:人)を面積(A16_006
,単位:㎢)で割り,人口密度(pop_den
)を計算.コロプレスマップによる人口密度分布の可視化
ポリゴンが相対的に小さいときに,ポリゴンの枠内を用いて色分けしても識別不能(枠の黒い線の方が目立つ).この場合,ポリゴンの枠も色を付けることが考える.
aes()
の引数はfill
だけでなくcolor
も指示.
size
)を細くする.scale_fill_viridis_c()
とscale_color_viridis_c()
で枠内と枠の色を指示.ここでは同色に指示.datum=NA
により緯線・経線を削除(透明に指示).theme()
を利用して,凡例を制御.位置(legend.position.inside
)を(地図中に)移動.凡例の背景(legend.background
)を透明に指示(枠,枠内をNA
). ggplot()+
geom_sf(data=Japan_map, fill="gray",
alpha=0.3, color="gray")+
geom_sf(data=DID_map,
aes(fill=pop_den, color=pop_den),
linewidth=0.01)+
scale_fill_viridis_c(option="G", direction=-1)+
scale_color_viridis_c(option="G", direction=-1)+
labs(fill="人/㎢", color="人/㎢",
x="", y="",
caption="出典:Natural Earth,国土交通省国土数値情報")+
ggtitle("コロプレスマップによる人口密度分布(2015年)")+
coord_sf(datum=NA)+
theme(legend.position.inside=c(0.85, 0.2),
legend.background=element_rect(fill=NA, color=NA))
重心の計算と緯度経度の抜き出し
ポリゴンが小さい場合,地図はまるでポイントデータを色分けしたように見える.そこで,ポイントデータの大小を目立たせる方法であるバブルマップを活用.
DID_map
をWGS84
に投影していることに伴い,重心の計算の際
にエラーメッセージが出現し,先に進めなくなる.S2
:球状のジオメトリが問題の模様.
warning
が出るが,正しく重心は計算される.エラーを回避するには,DID_map
のcrs
オプションを外せば良い(この場合,crs
はJGD2011)が,オプションを外すと,japan_map
との併用の際に,別のエラー発生.#球体無視,平面描写
sf_use_s2(FALSE)
#重心の計算
DID_map %>%
mutate(centroid=st_centroid(geometry),
x=st_coordinates(centroid)[, 1],
y=st_coordinates(centroid)[, 2]) ->
DID_map
人口密度の順番変更
バブルが重なり合うため,人口密度が高いバブルが地図の上に表れるように順番を変更(arrange
).
奄美群島と沖縄県を切り離した日本地図の作成
日本地図をコンパクトに示すために,ここでは奄美群島と沖縄県を切り離し,地図の右上(北西)方向に移して描写する.
Base map
とする(Base_map <-
).coord_sf()
を用いて,地図の範囲を東経128
°から148
°,北緯30
°から45
°に制限.
Base_map
と名付ける.
geom_point()
のaes()
に示される.ここでは人口密度(pop_den
)を色(color
),大きさ(size
)だけでなく,透過度(alpha
)でも表現する.scale_color_viridis_c()
で色分け,scale_size_continuous()
で描写する大きさの範囲,scale_alpha_continuous()
で描写する透過度の範囲を指示.
Base_map <-
ggplot()+
geom_sf(data=Japan_map, fill="gray",
alpha=0.3, color="gray")+
geom_point(data=DID_map,
aes(x=x, y=y, color=pop_den,
size=pop_den, alpha=pop_den))+
scale_color_viridis_c(option="G", direction=-1,
guide="legend")+
scale_size_continuous(range=c(-1, 4))+
scale_alpha_continuous(range=c(0.1, 0.8))+
labs(color="人/㎢", size="人/㎢", alpha="人/㎢",
x="", y="",
caption="出典:Natural Earth,国土交通省国土数値情報")+
ggtitle("人口集中地区の人口密度分布(2015年)")+
coord_sf(xlim=c(128, 148), ylim=c(30, 45), datum=NA)+
theme(legend.position.inside=c(0.85, 0.2),
legend.background=element_rect(fill=NA, color=NA))
#Base_mapのプロット
Base_map
区切り線
あらかじめ,奄美群島・沖縄県の区切り線を作成しておく.
annotate()
).
color
)や太さ(size
)を指定.-> Base_map
のまま.Base_map +
annotate("segment", x=128.5, xend=132.2,
y=38.5, yend=38.5,
color="gray", linewidth=1)+
annotate("segment", x=132.2, xend=136.7,
y=38.5, yend=43.2,
color="gray", linewidth=1) ->
Base_map
奄美群島と沖縄県の地図の作成
Amami_Okinawa_map
とする.coord_sf()
を用いて,地図の範囲を東経123.5
°から129.5
°,北緯23.5
°から28.5
°に制限.
base_map
に表現するため,奄美群島と沖縄県のポリゴンの枠線(geom_sf()
のsize
)が細くならように変更.
legend.position="none"
:凡例削除.Amami_Okinawa_map <-
ggplot()+
geom_sf(data=Japan_map, fill="gray", alpha=0.3,
color="gray", linewidth=0.8)+
geom_point(data=DID_map,
aes(x=x, y=y, color=pop_den,
size=pop_den, alpha=pop_den))+
scale_color_viridis_c(option="G", direction=-1,
guide="legend")+
scale_size_continuous(range=c(-1, 4))+
scale_alpha_continuous(range=c(0.1, 0.8))+
labs(color="人/㎢", size="人/㎢", alpha="人/㎢",
x="", y="")+
coord_sf(xlim= c(123.5, 129.5), ylim=c(23.5, 28.5),
datum=NA)+
theme(legend.position="none")
背景の無色化
ここでは,Amami_Okinawa_map
の背景を無色にして,Base_map
上に表現したい.
theme()
:図の体裁を変更する際に利用.
fill="transparent"
:背景の枠内透明.color=NA
:背景の枠を削除.grid.major
)と補助グリッド(grind.minor
)のの線(line
)の色を削除(color=NA
).plot.background
で無色にするように指示.Amami_Okinawa_map +
theme(
panel.background=element_rect(fill="transparent", color=NA),
panel.grid.major=element_line(color=NA),
panel.grid.minor=element_line(color=NA),
plot.background=element_rect(fill="transparent", color=NA)
) ->
Amami_Okinawa_map
奄美群島・沖縄県可視化
地図の保存
PNGで保存.
.png
にすることでPNGで保存される.
bg
)が無色(transparent
)であることを認識させる.完成図形
Base_map
上に地図画像Amami_Okinawa_map.png
を貼り付ける.
set_null_device("png")
:問題を引き起こさせないため.ggdraw()
:下地になる図の指示.
draw_image()
:貼り付ける図の指示.
scale
,貼り付け位置(水平方向(halign
),垂直方向(valign
))の指定.set_null_device("png")
#完成図形
ggdraw(Base_map)+
draw_image("Amami_Okinawa_map.png",
scale=0.3,
halign=0.15, valign=0.8)
参考ウェブサイト
参考文献
Rによる地理空間データの可視化
国内の都市人口をバブルマップで表現する方法はBrakman et al.(2019)のテキスト18頁,図1.6参照.↩︎
誤:122,113人,正:12,213人.三重の統計情報:みえDATABOX,平成27年国勢調査結果の概要(アクセス日:2022-08-21)で確認.↩︎