目的 塗り分け地図を描く
(単なる白地図も描けるが,その場合には 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)]))