ここの記事はだいぶ古いです.日本地図を描く JapanPrefMap を見ましょう

 

 

ひととおり描いてみる

    1. 次のライブラリをインストールし、読み込む。

library(gpclib)
library(maptools)
library(classInt)

    1.  ShapeFileライブラリからjapank.zipをダウンロードし、適当なフォルダに展開。
    2. 作業ディレクトリをjapank.zipを展開したフォルダに変更!(たとえば、c:/Users/username/Desktop/ の場合)

setwd(“c:/Users/username/Desktop/”)

  1. 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>となっているのに、こっちに長野県の情報がはいっていたりするので(なんのことかよくわからんが・・・)。

  2. (手動)都道府県の表記を一致させたcsvデータファイルの作成(negiprd2009.csv)
  3. csvファイルの読み込み

    > d02<-read.csv(“negiprod2009.csv”,h=T)

  4. 出荷率を付け加える(ここは地図描画の手順とは直接関係ない)

    > 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)
    >

     

  5. データの確認

    > names(d02)
    [1] “pref”      “area”      “ypa”       “yield”     “shipments” “spy”
    > d02$pref
     [1] 北海道   青森県   岩手県   宮城県   秋田県   山形県   福島県   茨城県
    [9] 栃木県   群馬県   埼玉県   千葉県   東京都   神奈川県 新潟県   富山県
    [17] 石川県   福井県   山梨県   長野県   岐阜県   静岡県   愛知県   三重県
    [25] 滋賀県   京都府   大阪府   兵庫県   奈良県   和歌山県 鳥取県   島根県
    [33] 岡山県   広島県   山口県   徳島県   香川県   愛媛県   高知県   福岡県
    [41] 佐賀県   長崎県   熊本県   大分県   宮崎県   鹿児島県 沖縄県
    47 Levels: 愛知県 愛媛県 茨城県 岡山県 沖縄県 岩手県 岐阜県 … 和歌山県

  6. 都道府県名を一致させる

    > d21<-match(d20\$PREF,d02\$pref)
    > d03<-d02[d21,]
    > d03$pref
     [1] 北海道   福島県   山形県   宮城県   岩手県   秋田県   青森県   東京都
    [9] 栃木県   埼玉県   神奈川県 茨城県   群馬県   千葉県   愛知県   福井県
    [17] 石川県   岐阜県   三重県   長野県   <NA>     新潟県   静岡県   富山県
    [25] 山梨県   兵庫県   京都府   和歌山県 滋賀県   大阪府   奈良県   広島県
    [33] 島根県   鳥取県   山口県   岡山県   徳島県   高知県   愛媛県   香川県
    [41] 沖縄県   鹿児島県 宮崎県   熊本県   大分県   福岡県   佐賀県   長崎県
    47 Levels: 愛知県 愛媛県 茨城県 岡山県 沖縄県 岩手県 岐阜県 … 和歌山県

  7. データの並びがシェープファイを読み込んだものd20と一致している
    rownamesも一致させる必要がある

    > row.names(d03)<-row.names(d20)

  8. 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

  9. 色分けの階級を指定する
    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
    + }

  10. 出荷量の分布地図をつくる
    区分点を作成する

    > br01<-fbr01(d04$shipments,6)
    > br01
    [1]     0  1600  8000 16000 24000 32000 40000 48000

  11. 色分けの色を指定

    > d22 <- c(“white”, “red2”)

  12. 作図に含まない都道府県を除外
    この後の処理で、NAが問題にされるようなレコーはここで除外。

    > d05<-d04[c(1:20,22:48),]

  13. 階級分け

    > d23 <- classIntervals(d05$shipments, n=7,
    +  style=”fixed”,
    +  fixedBreaks=br01)

  14. 階級分けの様子を確認できる。

    > # plot(d23, pal=d22, cex.axis=1.3, cex.lab=1.2, lwd=2, main=””,xlab=”出荷量”)

  15. 色の作成

    > d24 <- findColours(d23,d22)

  16. 作図

    > plot(d05,col=d24)

  17. タイトルと凡例

    > 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)

  1.  ShapeFileライブラリからjapank.zipをダウンロードし、適当なフォルダに展開。
  2. (手動)Rのメニュー:「ファイル」→「ディレクトリの変更」で、
    作業ディレクトリをjapank.zipを展開したフォルダに変更!
  3. shapeファイルの読み込み

     d20 <- readShapePoly(“./japank/japank.shp”)
    d20\$PREF[21]<-“長野県”
    d20$PREF[20]<-NA

  4. (手動)都道府県の表記を一致させたcsvデータファイルの作成(negiprd2009.csv)
  5. csvファイルの読み込み

     d02<-read.csv(“negiprod2009.csv”,h=T)

  6. 出荷率を付け加える(ここは地図描画の手順とは直接関係ない)

    d02<-cbind(d02,spy=d02[,5]/d02[,4])
    d03<-d02[,c(2,6)]

  7. 下の関数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)
}