jpndistrictは瓜生真也さんによる日本地図データパッケージ。
例えば三重県(JIS番号24)のデータは jpn_pref(24)
に入っている。jpn_pref(24)$city
は長さ29の配列で,"津市","四日市市",……といった自治体名が入っている。jpn_pref(24)$geometry
に地図データが入っている。
ここでは,中日新聞三重県版2018年7月21日の酷暑対策で地域差 県内小中の冷房率、全国平均以下という記事にある「小中学校普通教室の冷房設置率(%、市町別)」(※県まとめ、17年4月時点)という表のデータを地図に描いてみる。並び順は地町村コード順で,jpn_pref(24)$city
と打ち込んで調べられる。
x = c(11,3,100,6,34,25,1,4,40,91,0,100,0,84,100,100,71,58,29,18,38,100,100,100,83,100,10,0,0)
念のため,市町村名とペアにして設置率順に並べ替え,新聞の表と照合する:
df = data.frame(c=jpn_pref(24)$city, x=x)
df[order(-df$x),]
これを設置率0(赤)から設置率100%(青)までの色のグラデーションで表す:
cols = colorRamp(c("#ff2800","white","#0041ff"))
par(mar=c(0,0,0,0))
plot(jpn_pref(24)$geometry, col=rgb(cols(x/100)/255))
瓜生さんによれば,最後の行は次のようにしてもよいとのことである:
plot(sf::st_geometry(jpn_pref(24)), col=rgb(cols(x/100)/255))
最後に,グラデーションのキャプションを描き込む。描き込むだいたいの位置は locator()
と打ち込んで2点ほど図の上をクリックし,最後に右クリックすると表示される。
lx = c(136.7, 137.2)
ly = c(33.8, 33.9)
rect(lx[1]+(lx[2]-lx[1])*(0:99)/100, ly[1],
lx[1]+(lx[2]-lx[1])*(1:100)/100, ly[2],
col=rgb(cols(0:99/99)/255), border=NA)
rect(lx[1], ly[1], lx[2], ly[2])
text(lx[1]+(lx[2]-lx[1])*(0:2)/2, ly[1], c("0%","50%","100%"), pos=1)
色は日本地図: 普通教室のエアコン設置率に合わせたのだが,どぎつ過ぎのような気がしてきた。