ここの記事はだいぶ古いです.日本地図を描く JapanPrefMap を見ましょう
ひととおり描いてみる
- 次のライブラリをインストールし、読み込む。
library(gpclib)
library(maptools)
library(classInt)
- ShapeFileライブラリからjapank.zipをダウンロードし、適当なフォルダに展開。
- 作業ディレクトリをjapank.zipを展開したフォルダに変更!(たとえば、c:/Users/username/Desktop/ の場合)
setwd(“c:/Users/username/Desktop/”)
- shapeファイルの読み込み
> d20 <- readShapePoly(“./japank/japank.shp”)
> names(d20)
[1] “PREF” “CITY1” “CITY2” “TOWN1” “TOWN2” “JCODE”
[7] “P_NUM” “H_NUM” “FLAG1” “FLAG2” “S_TKY2JGD”
> d20$PREF
[1] 北海道 福島県 山形県 宮城県 岩手県 秋田県 青森県 東京都
[9] 栃木県 埼玉県 神奈川県 茨城県 群馬県 千葉県 愛知県 福井県
[17] 石川県 岐阜県 三重県 長野県 <NA> 新潟県 静岡県 富山県
[25] 山梨県 兵庫県 京都府 和歌山県 滋賀県 大阪府 奈良県 広島県
[33] 島根県 鳥取県 山口県 岡山県 徳島県 高知県 愛媛県 香川県
[41] 沖縄県 鹿児島県 宮崎県 熊本県 大分県 福岡県 佐賀県 長崎県
47 Levels: 愛知県 愛媛県 茨城県 岡山県 沖縄県 岩手県 岐阜県 … 和歌山県
> d20\$PREF[21]<-“長野県”
> d20$PREF[20]<-NA最後のところは、21番目が<NA>となっているのに、こっちに長野県の情報がはいっていたりするので(なんのことかよくわからんが・・・)。
- (手動)都道府県の表記を一致させたcsvデータファイルの作成(negiprd2009.csv)
- csvファイルの読み込み
> d02<-read.csv(“negiprod2009.csv”,h=T)
- 出荷率を付け加える(ここは地図描画の手順とは直接関係ない)
> d02<-cbind(d02,spy=d02[,5]/d02[,4])
> d03<-d02[,c(2,6)]
> plot(d03,type=”n”,main=”秋冬ネギの作付面積と出荷率の相関”,ylim=c(0,1))
> text(d03,labels=d02[1:46,1],cex=0.7)
>
- データの確認
> names(d02)
[1] “pref” “area” “ypa” “yield” “shipments” “spy”
> d02$pref
[1] 北海道 青森県 岩手県 宮城県 秋田県 山形県 福島県 茨城県
[9] 栃木県 群馬県 埼玉県 千葉県 東京都 神奈川県 新潟県 富山県
[17] 石川県 福井県 山梨県 長野県 岐阜県 静岡県 愛知県 三重県
[25] 滋賀県 京都府 大阪府 兵庫県 奈良県 和歌山県 鳥取県 島根県
[33] 岡山県 広島県 山口県 徳島県 香川県 愛媛県 高知県 福岡県
[41] 佐賀県 長崎県 熊本県 大分県 宮崎県 鹿児島県 沖縄県
47 Levels: 愛知県 愛媛県 茨城県 岡山県 沖縄県 岩手県 岐阜県 … 和歌山県- 都道府県名を一致させる
> d21<-match(d20\$PREF,d02\$pref)
> d03<-d02[d21,]
> d03$pref
[1] 北海道 福島県 山形県 宮城県 岩手県 秋田県 青森県 東京都
[9] 栃木県 埼玉県 神奈川県 茨城県 群馬県 千葉県 愛知県 福井県
[17] 石川県 岐阜県 三重県 長野県 <NA> 新潟県 静岡県 富山県
[25] 山梨県 兵庫県 京都府 和歌山県 滋賀県 大阪府 奈良県 広島県
[33] 島根県 鳥取県 山口県 岡山県 徳島県 高知県 愛媛県 香川県
[41] 沖縄県 鹿児島県 宮崎県 熊本県 大分県 福岡県 佐賀県 長崎県
47 Levels: 愛知県 愛媛県 茨城県 岡山県 沖縄県 岩手県 岐阜県 … 和歌山県- データの並びがシェープファイを読み込んだものd20と一致している
rownamesも一致させる必要がある> row.names(d03)<-row.names(d20)
- d20とd03を結合する。
> d04<-spCbind(d20,d03)
> names(d04)
[1] “PREF” “CITY1” “CITY2” “TOWN1” “TOWN2” “JCODE”
[7] “P_NUM” “H_NUM” “FLAG1” “FLAG2” “S_TKY2JGD” “pref”
[13] “area” “ypa” “yield” “shipments” “spy”“pref”: 都道府県名
“area”: 作付け面積
“ypa”: 10aあたり収量
“yield”: 収穫量
“shipments”: 出荷量
“spy”: 出荷率=shipments/yield- 色分けの階級を指定する
classIntervals関数の中で、style=で、いろんな区切り方が指定できる。
“quantile”:等量
“equal”:等間隔
“sd”:標準偏差
“fisher”:自然階級
“fixed”:外から与える
その他、クラスター法とかも・・・
ここでは、n=2,3,4,5,…の等間隔に分けるが、
区切りをキリの良いところにして、
しかも、0付近だけは別に小さく区切る(他の1階級の1/5幅)という
n+1階級を求める関数をつくってみる。
ただし、x>0の場合のみ> fbr01<-function(x,n){
+ mx01<-max(x,na.rm=T)
+ vc01<-ceiling((mx01/10^floor(log10(mx01))*10)/n)*10^(floor(log10(mx01))-1)
+ br01<-c(0,vc01/5,vc01)
+ for(i in 2:n) br01<-c(br01,vc01*i)
+ br01
+ }- 出荷量の分布地図をつくる
区分点を作成する> br01<-fbr01(d04$shipments,6)
> br01
[1] 0 1600 8000 16000 24000 32000 40000 48000- 色分けの色を指定
> d22 <- c(“white”, “red2”)
- 作図に含まない都道府県を除外
この後の処理で、NAが問題にされるようなレコーはここで除外。> d05<-d04[c(1:20,22:48),]
- 階級分け
> d23 <- classIntervals(d05$shipments, n=7,
+ style=”fixed”,
+ fixedBreaks=br01)- 階級分けの様子を確認できる。
> # plot(d23, pal=d22, cex.axis=1.3, cex.lab=1.2, lwd=2, main=””,xlab=”出荷量”)
- 色の作成
> d24 <- findColours(d23,d22)
- 作図
> plot(d05,col=d24)
- タイトルと凡例
> title(“出荷量 秋冬ネギ H21”, cex=0.5)
> legend(“topleft”,
+ fill=attr(d24,”palette”),
+ cex=0.4,legend=names(attr(d24,”table”)),
+ bty=”7″)
#必要なライブラリの読み込み
library(gpclib)
library(maptools)
library(classInt)
#http://www.okada.jp.org/RWiki/?ShapeFile%A5%E9%A5%A4%A5%D6%A5%E9%A5%EA#r14d713d
#からjapank.zipをダウンロードし、適当なフォルダに展開。
#
#(手動)Rのメニュー:「ファイル」→「ディレクトリの変更」で、
#作業ディレクトリをjapank.zipを展開したフォルダに変更!
#
#shapeファイルの読み込み
d20 <- readShapePoly("./japank/japank.shp")
names(d20)
d20$PREF
d20$PREF[21]<-"長野県"
d20$PREF[20]<-NA
#最後のところは、21番目がとなっているのに、、こっちが本命なので。
#(手動)都道府県の表記を一致させたcsvデータファイルの作成(negiprd2009.csv)
#csvファイルの読み込み
d02<-read.csv("negiprod2009.csv",h=T)
#出荷率を付け加える(ここは地図描画の手順とは直接関係ない)
d02<-cbind(d02,spy=d02[,5]/d02[,4])
d03<-d02[,c(2,6)]
plot(d03,type="n",main="秋冬ネギの作付面積と出荷率の相関",ylim=c(0,1))
text(d03,labels=d02[1:46,1],cex=0.7)
#データの確認
names(d02)
d02$pref
#都道府県名を一致させる
d21<-match(d20$PREF,d02$pref)
d03<-d02[d21,]
#
#データの並びがシェープファイを読み込んだものd20と一致している
d03$pref
#
#rownamesも一致させる必要がある
row.names(d03)<-row.names(d20)
#
#d20とd03を結合する。
d04<-spCbind(d20,d03) names(d04) # #色分けの階級を指定する #classIntervals関数の中で、style=で、いろんな区切り方が指定できる。 #"quantile":等量 #"equal":等間隔 #"sd":標準偏差 #"fisher":自然階級 #"fixed":外から与える #その他、クラスター法とかも・・・ # #ここでは、n=2,3,4,5,...の等間隔に分けるが、 #区切りをキリの良いところにして、 #しかも、0付近だけは別に小さく区切る(他の1階級の1/5幅)という #n+1階級を求める関数をつくってみる。 #ただし、x>0の場合のみ
fbr01<-function(x,n){
mx01<-max(x,na.rm=T)
vc01<-ceiling((mx01/10^floor(log10(mx01))*10)/n)*10^(floor(log10(mx01))-1)
br01<-c(0,vc01/5,vc01)
for(i in 2:n) br01<-c(br01,vc01*i)
br01
}
#出荷量の分布地図をつくる
#区分点を作成する
br01<-fbr01(d04$shipments,6)
br01
#色分けの色を指定
d22 <- c("white", "red2")
#作図に含まない都道府県を除外
#この後の処理で、NAが問題にされるようなレコーはここで除外。
d05<-d04[c(1:20,22:48),]
#階級分け
d23 <- classIntervals(d05$shipments, n=7,
style="fixed",
fixedBreaks=br01)
#階級分けの様子を確認できる。
# plot(d23, pal=d22, cex.axis=1.3, cex.lab=1.2, lwd=2, main="",xlab="出荷量")
#色の作成
d24 <- findColours(d23,d22)
#作図
plot(d05,col=d24)
#タイトルと凡例
title("出荷量 秋冬ネギ H21", cex=0.5)
legend("topleft",
fill=attr(d24,"palette"),
cex=0.4,legend=names(attr(d24,"table")),
bty="7")
関数化してみる
ちょっと面倒なので、関数化してみました。
上と同様に、初めて使う場合は、必要なライブラリの読み込む。
library(gpclib)
library(maptools)
library(classInt)
- ShapeFileライブラリからjapank.zipをダウンロードし、適当なフォルダに展開。
- (手動)Rのメニュー:「ファイル」→「ディレクトリの変更」で、
作業ディレクトリをjapank.zipを展開したフォルダに変更! - shapeファイルの読み込み
d20 <- readShapePoly(“./japank/japank.shp”)
d20\$PREF[21]<-“長野県”
d20$PREF[20]<-NA - (手動)都道府県の表記を一致させたcsvデータファイルの作成(negiprd2009.csv)
- csvファイルの読み込み
d02<-read.csv(“negiprod2009.csv”,h=T)
- 出荷率を付け加える(ここは地図描画の手順とは直接関係ない)
d02<-cbind(d02,spy=d02[,5]/d02[,4])
d03<-d02[,c(2,6)] - 下の関数jpnk01を読み込むと、以下のように使える
jpnk01(d20,d02[,c(1,6)],xlb=”出荷率 %”,zup=T)
ちなみに、引数は次のとおり。
mdata: japank.shpをreadShapePolyで読み込んだもの
ddata: 描画データ。1列目はmdata$PREFと同じ表記の都道府県名、2列めは描画データ
drwNo: 描画する都道府県名。mdata$PREFの番号。20(長野県飛び地)はデフォルトで削除)
nbr: 階級区分数-1
xlb: グラフラベル
brcol: 描画色
zup: =Tで、本州中心にズームアップ(=F)
jpnk01<-function(mdata,ddata,drwNo=c(1:19,21:48),nbr=6,xlb=colnames(ddata)[2],brcol=c("white", "red2"),zup=F){
#mdata:japank.shpをreadShapePolyで読み込んだもの
#ddata:描画データ。1列目はmdata$PREFと同じ表記の都道府県名、2列めは描画データ
#drwNo:描画する都道府県名。mdata$PREFの番号。21(長野県飛び地)はデフォルトで削除)
#nbr:階級区分数-1(=6)
#xlb:グラフラベル(=colnames(ddata)[2])
#brcol: 描画色(=c("white", "red2"))
#都道府県名を一致させる
d21<-match(mdata$PREF,ddata[,1])
d03<-ddata[d21,]
#rownamesも一致させる必要がある
row.names(d03)<-row.names(mdata)
#
#mdataとd03を結合する。
d04<-spCbind(mdata,d03) #出荷量の分布地図をつくる #色分けの階級を指定する #ここでは、n=2,3,4,5,...の等間隔に分けるが、 #区切りをキリの良いところにして、 #しかも、0付近だけは別に小さく区切る(他の1階級の1/5幅)という #n+1階級を求める関数をつくってみる。 #ただし、x>0の場合のみ
fbr01<-function(x,n){
mx01<-max(x,na.rm=T)
vc01<-ceiling((mx01/10^floor(log10(mx01))*10)/n)*10^(floor(log10(mx01))-1)
br01<-c(0,vc01/5,vc01)
for(i in 2:n) br01<-c(br01,vc01*i)
br01
}
#区分点を作成する
brp01<<-fbr01(d03[,2],nbr)
#作図に含まない都道府県を除外
#この後の処理で、NAが問題にされるようなレコーはここで除外。
d06<-d03[drwNo,]
d06<-na.omit(d06)
d05<-d04[row.names(d06),]
#階級分け
nbr1<-nbr+1
d23<-classIntervals(d06[,2], n=nbr1,style="fixed", fixedBreaks=brp01)
#色の作成
d24 <- findColours(d23,brcol)
#作図
if(zup==TRUE){
#本州中心にズームUPする
mbx<-d05@"bbox"
mbx[,]<-matrix(c(130,143,31,45.5),2,2,byrow=T)
d05@"bbox"<-mbx
}
plot(d05,col=d24)
#タイトルと凡例
title(xlb, cex=0.5)
legend("topleft",
fill=attr(d24,"palette"),
cex=0.5,legend=names(attr(d24,"table")),
bty=nbr1)
}