塗り分け地図を描く Last modified: Oct 31, 2006
目的
塗り分け地図を描く
(単なる白地図も描けるが,その場合には map.draw でもよい)
使用法
map(code, density, color)
ただし,このままでは場合によっては使いにくいので,いくつかのレディー・メードの関数(ラッパー;上位関数)を用意している。
引数
code 描画する都道府県コード(1:北海道〜47:沖縄まで)
density ハッチングの 1 インチあたりの密度
color 色の指定
density と color の要素数は,描画する都道府県の数(code の要素数)と同じ個数でないといけない
density, color を両方とも省略すると,白地図
density のみを指定すると,モノクロのハッチングによる塗り分け地図
color のみを指定すると,その色での塗り分け地図
ソース
インストールは,以下の 1 行をコピーし,R コンソールにペーストする
source("http://aoki2.si.gunma-u.ac.jp/R/src/map.R", encoding="euc-jp")
# 塗り分け地図を描く
map <- function(code.list, # 描画する都道府県コード
density=NULL, # ハッチングの 1 インチあたりの線密度
color=NULL) # 塗り分けに使用する色
{
map0 <- function(data, dens, color) # 描画関数
{
continue <- apply(data, 1, any) # 経度と緯度が共に 0 が描画の区切り
plot(lon, lat, type = "n", axes=FALSE, # 大枠を決める
xlab="", ylab="", bty="n", asp=1)
start <- 1
k <- 0
for (i in 2:nrow(data)) {
if (continue[i] == FALSE) { # 区切れ目
k <- k+1 # 何番目の描画か
if (i-start == 4) { # 沖縄を描くときの区画線
lines(data[start:(i-1),])
}
else {
polygon(data[start:(i-1),], density=dens[k], col=color[k], border="black")
}
start <- i+1
}
}
}
# 関数本体
for (i in seq(along=code.list)) { # 指定した全ての都道府県について
if (code.list[i] %in% c(15, 28, 47)) { # 新潟県,兵庫県,沖縄県は描画パーツが 2 つ
code.list <- c(code.list, -code.list[i]) # コードリストの追加(目印とするために負の数で)
density <- c(density, density[i]) # 線密度と
color <- c(color, color[i]) # 色も追加する
}
}
code.list[code.list == -15] <- 48 # 追加のコードリストに直す
code.list[code.list == -28] <- 49
code.list[code.list == -47] <- 50
lon <- lat <- NULL
for (i in code.list) { # 指定した全ての都道府県について
fn <- sprintf("jpn/%02i", i) # データファイル名を得る
gwm <- matrix(scan(fn, quiet=TRUE), ncol=2, byrow=TRUE) # データを読む
lon <- c(lon, gwm[,1], 0) # 経度を蓄積
lat <- c(lat, gwm[,2], 0) # 緯度を蓄積
}
mlon <- min(lon[lon != 0]) # 経度の最小値
mlat <- max(lat[lat != 0]) # 緯度の最大値
lon <- ifelse(lon == 0, 0, lon-mlon+1) # 経度の調整
lat <- ifelse(lat == 0, 0, mlat-lat+1) # 緯度の調整
map0(cbind(as.integer(lon), as.integer(lat)), density, color) # 描画関数を呼ぶ
}
使用する地図(境界)データ
[jpn.zip]をダウンロードし,展開する。
展開されてできた jpn フォルダには,"01" 〜 "50" の50個のファイルが含まれている。
展開した jpn フォルダを,R のワーキングディレクトリーに移動(コピー)する。
(あるいは,展開したファイルが含まれるディレクトリをワーキングディレクトリーとする)。
注:2006/10/31までは,jpn フォルダの中のファイルをワーキングディレクトリに移動(コピー)するようにしていたが,現在はフォルダをワーキングディレクトリーに移動(コピー)するように仕様を変更した。
使用例
map(1:47, color=c(colors()[runif(47, 1, 657)]))
map(c(8:15, 19, 20), color=c(colors()[runif(10, 1, 657)]))
map(36:39, density=c(0, 10, 20, 50), color=c(colors()[runif(4, 1, 657)]))
直前のページへ戻る
E-mail to Shigenobu AOKI