# 地図の種類

# ドットマップ・・・ポイントデータの散布図

# 比率シンボルマップ・・・数値の大小を円形などのシンボルの大きさの比率で表現(視覚的認知ズレ補正が必要)

# ドット密度マップ・・・領域内で数えられた数値を表すのに,領域内にランダムに点を打つ(ドットマップと混同注意)

# チャートマップ・・・統計グラフ(円グラフ,棒グラフ等)を地図上に配置

# 等値線図・・・同じ値を曲線でつなぐことで視覚化,等値線図またはコンターと呼ばれる

# コロプレス図・・・階級区分地図や塗り分け地図と呼ばれる基本的な地図表現

# 3次元図・・・平面の地図上にその属性値を3次元的に表する

# カーネル密度推定・・・ポイントデータの密度を,カーネル密度推定を使って連続面として推計

# sidsデータの読込

library(maptools)

pj <- CRS("+proj=longlat +sllps=clrk66") # 投影法=地理座標系,準拠楕円体=Clarke1866

f <- system.file("shapes/sids.shp",package="maptools") # シェープファイルのフルパス

nc <- readShapePoly(f,IDvar="FIPSNO",proj4string=pj) # SpatialPolygonsDataFrameに読込

# sidsデータの例(ドットマップ)

# coordinates()はポリゴンの幾何的中心点を求める

plot(coordinates(nc),asp=1,xlab="Longitude",ylab="Latitude")

# 属性値として1974-1978年の新生児数を幾何中心に色付けして視覚化

# spplot()を使うために属性値もspクラスで読み込む

nc.b74 <- SpatialPointsDataFrame(SpatialPoints(coordinates(nc)),data=data.frame(nc@data$BIR74))

spplot(nc.b74) # ドットマップに色を付ける

# sidsデータの例(比率シンボルマップ)

bubble(nc.b74) # 補正なしの単純なシンボルマップ

# sidsデータの例(ドット密度マップ)

d <- dotsInPolys(nc,as.integer(nc@data$SID74))

plot(nc,axes=T)

title(main="SIDS 1974-78")

plot(d,pch=19,cex=0.5,col="red",add=T)

# sidsデータの例(チャートマップ)

# ncのdataスロットに格納されているデータ

str(nc@data)

# 1974-78年の群別出生数(BIR74),SIDS死亡数(SID74),1979-84年の出生数(BIR79),SIDS死亡数(SID79)

# SIDS死亡率(100,000人辺りのSIDS死亡数)の計算

d74 <- nc@data$SID74/nc@data$BIR74*1e+5

d79 <- nc@data$SID79/nc@data$BIR79*1e+5

summary(d74)

summary(d79)

# TeachingDemosのsubplot()を用いて2期間の死亡率の棒グラフを幾何中心に描く

library(TeachingDemos)

d <- cbind(d74,d79)

d.m <- max(d)

cols <- c(gray(0.3),gray(0.8))

plot(nc)

nc.c <- coordinates(nc) # 各ポリゴンの幾何中心

for(i in 1:nrow(nc.c)){

  subplot(

    barplot(d[i,],ylim=c(0,d.m),col=cols,names=c("",""),yaxt="n"),

    x=nc.c[i,1],y=nc.c[i,2],size=c(0.1,0.5),vadj=0

  )

}

legend(-83.5,35,c("1974-1979","1979-1984"),fill=cols,bty="n",cex=0.8)

title(main="1974-1978年と1979-1984年の米国ノースカロライナ州\nSIDS死亡率の違いとその地理分布")

# volcanoの例(等値線図)

# contour()またはlatticeのcontourLines()で描くことができる

# ニュージーランドのオークランド火山帯にあるMaunga Whau火山の数値標高データ

library(maptools)

x <- 10 * 1:nrow(volcano)

y <- 10 * 1:ncol(volcano)

clv <- contourLines(x,y,volcano) # 等値線図の作成

res <- ContourLines2SLDF(clv) # 等値線図をSpatialLinesDataFrameクラスに変換

grd <- GridTopology(c(0,0),c(10,10),dim(volcano))

alt <- data.frame(altitude=as.vector(volcano[,ncol(volcano):1]))

spvolcano <- SpatialGridDataFrame(grd,alt) #

spplot(spvolcano,sp.layout=list(list("sp.lines",res)))

# sidsデータの例(コロプレス図)

# spplot()でzcolに表示したい属性データの変数名を指定(省略すると全ての属性データ)

# SpatialPolygonsDataFrameクラスに含まれる変数のみ描画できる

spplot(nc,zcol=c("BIR74","NWBIR74","BIR79","NWBIR79"),

names.attr=c("Births, 1974-78","Non-White Births, 1974-78","Births, 1979-84","Non-White Births, 1979-84"))

# 米国ノースカロライナ州SIDS死亡率データ

d74 <- nc@data$SID74/nc@data$BIR74 * 1e+5

nc@data <- cbind(nc@data,d74)

spplot(nc,zcol="d74")

# 塗り分けの階級区分を5段階(200ずつ区切る)にしてみる

library(RColorBrewer)

brks <- c(0,200,400,600,800,1000)

spplot(nc,zcol="d74",at=brks,col.region=brewer.pal(5,"BuPu"))

# volcanoの例(3次元図)

z <- 2*volcano # 標高差を強調するために2倍してある

x <- 10*(1:nrow(z))

y <- 10*(1:ncol(z))

persp(x,y,z,theta=120,phi=15,scale=F,axes=F)

# bodminデータの例 (カーネル密度推定)

# ボドミンムーアにおける花崗岩の位置データ

library(splancs)

data(bodmin)

plot(bodmin$poly,asp=1,type="n",axes=F,xlab="",ylab="")

image(kernel2d(as.points(bodmin),bodmin$poly,h0=2),add=T)