NipponMap
に他のウェブサイトからダウンロードした都道府県別データを加え,可視化.今回は65歳以上人口割合を表現する.また,シェープファイルを使わずに都道府県データ(65歳以上人口割合)を表現する方法を紹介する.
ライブラリ:sf
,tidyverse
,Nipponmap
シェープファイル
作業フォルダ(ディレクトリ)にjpn.shp
などが含まれるshapes
と示されるフォルダがあることを前提とする.
Nippon_map
と名付け,read_sf()
でデータを読込.
Nippon_map<-
以降のコマンドをread_sf(system.file("shapes/jpn.shp"), package="NipponMap")
にしても可能.この場合,移す作業は必要ない.crs="WGS84"
は削除しても目的は達成可能.crs
(Coordinate
ReferenceSystem,座標参照系)を1984年に定められた世界測地系(World
Geodetic System)に投影を意味.ダウンロード
0000_全国
を選択して,「地域を削除」をクリック.これで「選択中地域」欄は都道府県(47地域)になる.「確定」をクリック.
指標データ
> 分野:#A 人口・世帯
#A03503 65歳以上人口割合(%)
> 確定
データの読込
read.csv()
:CSV形式のデータの読込.sep=","
:データがカンマで区切られていることを指示.CSV形式のデータをメモ帳やEXCELで開くと,データがカンマで区切られていることがわかる.skip=1
:1行目を削除.CSV形式のデータをメモ帳やEXCELで開くと,最初の2行に列名(項目名)が記されている.ここでは,1行目は利用しない.header=TRUE
:1行目(削除前の2行目)が列名であることを指示.fileEncoding
:文字化けを防止.#65歳以上高齢者人口割合データの読込
Elderly_pop<-read.csv("FEI_PREF_220523124500.csv",
sep=",", skip=1,
header=TRUE,
fileEncoding="CP932" )
データの中身
パイプ演算子(%>%
)の活用.1
head()
を用いて上から6行までのデータの中身を確認.データの加工
rename()
を用いてElderly_pop
の3列目(地域.コード)と6列目(X.A03503_65歳以上人口割合…)の列名変更.データ名はそのままElderly_pop
とする.SP_ID
)を用いて,地図データ(Nippon_map
)と65歳以上高齢者人口割合データ(Elderly_pop
)の結合準備.
mutate()
:データの列の変更や追加を指示.Elderly_pop
のSP_ID
は例えば北海道が1000
になっている.一方,Nippon_map
では北海道は1
である.そこで,Nippon_map
の表記にそろえるためElderly_pop
のSP_ID
を1000
で割る.Nippon_map
のSP_ID
は<chr>
(character:文字列),Elderly_pop
のSP_ID
は<int>
(integer:数値)のため結合できない.Elderly_pop
のSP_ID
を文字列に変換.Elderly_pop
とする.#列名の変更
Elderly_pop %>%
rename(SP_ID=3,
Elderly_pop_rate=6) ->
Elderly_pop
#データ結合のための準備
Elderly_pop %>%
mutate(SP_ID=SP_ID/1000) %>%
mutate(SP_ID=as.character(SP_ID)) ->
Elderly_pop
データの結合
シェープファイルである地図データ(Nippon_map
)と65歳以上高齢者人口割合データ(Elderly_pop
)を結合.
Nippon_map
)と65歳以上高齢者人口割合データ(Elderly_pop
)をSP_ID
で結合(left_join
)し,Elderlry_map
と名付ける.参考コード
次のウェブサイトのコードを参考にした.
ggplot2::geom_tile()で日本地図(アクセス日:2022-10-23)
データファイル(JP_plot
と名付けられている)の作り方は上記サイトのコードを基本コピーする.
geom_tile()
を用いて四角形で示された都道府県が2次元(x
軸,y
軸)の平面に配置され,色分けされる.(x,y)=(1,1)
に配置,北海道は(x,y)=(16,14)
に配置される.JP_plot
には都道府県の識別番号がないため,識別番号(ID
)を北海道(1
)から順番に加えていく.下記のように加えていく.JP_plot <- tribble(
~ID, ~Prefecture, ~Code, ~x, ~y,
1, "北海道", "HK", 16, 14,
2, "青森県", "AO", 15, 11,
JP_plot
の中身
ID
が追加されている.データの結合
JP_plot
に結合する.
SP_ID
からID
を作成.数字列(as.numeric()
)に戻す.#IDの作成
Elderly_pop %>%
mutate(ID=as.numeric(SP_ID)) ->
Elderly_pop1
#IDでデータ結合
Elderlry_map1<-
left_join(JP_plot, Elderly_pop1,
by=c("ID"))
完成地図
geom_tile()
の説明.
width
とheight
は都道府県の横と縦の長さ.Elderlry_map1
に納められているScale
変数を利用.color
により四角(都道府県)の枠の色を白(white
)に指定.65歳以上人口割合(Elderly_pop_rate
)をscale_fill_viridis_c()
を用いて色分け.
この図では,タイトルと出典を図の枠内に収めた.annotate()
を利用すると,自由な位置に文字を記入可能.
coord_fixed()
:座標の縦横比の固定.
theme()
の説明.
legend.position
:凡例の位置の指示.legend.background
:凡例の背景の指示.ここでは,無色指定.panel.grid
:グリッド線の指示.ここでは,非表示指定.axis.title
:軸タイトルの指示.ここでは,非表示指定.axis.text
:軸テキストの指示.ここでは,非表示指定.axis.ticks
:軸目盛の指示.ここでは,非表示指定.ggplot()+
geom_tile(data=Elderlry_map1,
aes(x=x, y=y, width=Scale, height=Scale,
fill=Elderly_pop_rate),
color="white")+
scale_fill_viridis_c(option="G", direction=-1)+
geom_text(data=Elderlry_map1, aes(x=x, y=y, label=Prefec),
size=2.7, color="white")+
annotate("text", x=1, y=16,
label="65歳以上人口割合(2019年度)",
color="black", size=5, hjust=0)+
annotate("text", x=10, y=1,
label="出典:総務省都道府県・市区町村のすがた,
https://qiita.com/masaki_kubota",
color="black", size=3, hjust=0)+
labs(fill="%")+
coord_fixed(ratio=1)+
theme(legend.position=c(0.2, 0.7),
legend.background=element_rect(fill=NA, color=NA),
panel.grid=element_blank(),
axis.title=element_blank(),
axis.text=element_blank(),
axis.ticks=element_blank())
参考ウェブサイト
Rによる地理空間データの可視化