大阪市塗り分け

大阪市における特別区の設置についての投票

(参考・使用したデータ等)
大阪市における特別区の設置についての投票
大阪各区の開票結果

(地図のデータ)
マップナビおおさかオープンデータ一覧
地図情報(マップナビおおさか掲載情報以外)区域画像(Shapefile)

(準備)
地図データをダウンロードー>解凍
ー>ファイル名「24区画像」を「osaka」(例えば、「24区画像.shp」は「osaka.shp」) にリネーム
ー>作業ディレクトリに保存

使用するOS、Rのバージョンによってデータを取り込む命令が異なる。
使うデータはあらかじめダウンロードしておくのが一番よい。

ここではOSはzorin。RのバージョンR3.1.2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
library(maptools)
#osaka <- readShapePoly("osaka.shp")
library(rgdal)
osaka<-readOGR("osaka.shp", layer="osaka",encoding="Shift_JIS")
#plot(osaka)
osakadata <- osaka@data
#head(osakadata)
#表示用データのインポート
vote <- read.csv("http://oku.edu.mie-u.ac.jp/~okumura/stat/data/osaka2015.csv", header=TRUE,fileEncoding="UTF-8")
#エラーになるようならデータをダウンロード。文字コードと改行コードを指定し直して保存。
#vote <- read.csv("osaka2015.csv", header=TRUE)
#head(vote)
#表示用データをDBFデータにマージ
#osakadataの行順を崩さないようにする。
osakadata<-merge(x=osakadata,y=vote,by.x="ATTR2",by.y="区名",sort=F)
#head(osakadata)

塗り分け地図

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#都構想に賛成の割合
#png("osaka01.png",width=1000,height=800)
par(mfrow=c(1,2))
#2色
DD <- osakadata$賛成/(osakadata$投票者男+osakadata$投票者女)
#cutnum<-2
#classes <- cut(DD,seq(0,1,length=cutnum+1),include.lowest=T)
classes <- cut(DD,c(min(DD),0.5,max(DD)),include.lowest=T)
#区名を書く座標(ポリゴンの重心を得る)
cents <- coordinates(osaka)
x <- cents[,1]
y <- cents[,2]
#plot
par(cex=0.9)
cols <- c("pink","lightblue")
plot(osaka,col=cols[classes],xlab="",ylab="",axes=F)
box()
#区名を書く
text(x,y,as.character(osakadata$ATTR2),cex=0.7,pos=1,offset=0,col="black")
#凡例とタイトル
legend("topleft",legend=c("賛成の多かった区","反対の多かった区"),cex=1,fill=c("lightblue","pink"),text.col='black')
title("都構想に賛成の多かった区,反対の多かった区")
#
#賛成の割合、反対の割合に応じて色の濃さを変える
#
DD <- osakadata$賛成/(osakadata$投票者男+osakadata$投票者女)
cutnum<-20
classes <- cut(DD,seq(0.4,0.6,length=cutnum+1),include.lowest=T)
#区名を書く座標(ポリゴンの重心を得る)
cents <- coordinates(osaka)
x <- cents[,1]
y <- cents[,2]
#plot
par(cex=0.9)
colblue <- colorRampPalette(c("blue","#C6C6FF"))
colred <- colorRampPalette(c("#FFC6C6","red"))
cols<-rev(c(colblue(10),colred(10)))
plot(osaka,col=cols[classes],xlab="",ylab="",axes=F)
box()
#区名を書く
text(x,y,as.character(osakadata$ATTR2),cex=0.7,pos=1,offset=0,col="black")
#凡例とタイトル
cols2 <- c(colblue(10),colred(10))
legend("topleft",legend=names(rev(table(classes))),cex=0.7,fill=cols2,text.col='black',ncol=2)
title("都構想に賛成の割合")
par(mfrow=c(1,1))
#dev.off()

地図上に円グラフ(無効票は無視)

  • mapplosパッケージのadd.pie関数
  • plotrixパッケージのfloating.pie関数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#png("osaka02.png",width=1000,height=800)
par(mfrow=c(1,2))
#mapplosパッケージのadd.pie関数
library(mapplots)
DD1 <- osakadata$賛成/(osakadata$賛成+osakadata$反対)
DD2 <- 1-DD1
rr <- (max(cents[,2])-min(cents[,2]))/20
plot(osaka,col="lightgray",xlab="",ylab="",axes=F)
box()
for (i in 1:nrow(osakadata)) {
add.pie(z=c(DD1[i],DD2[i]), x=cents[i, 1], y=cents[i, 2],
radius=rr,col=c("lightblue","pink"),label.dist=NA)
}
#凡例とタイトル
legend("topleft",legend=c("賛成","反対"),cex=1,fill=c("lightblue","pink"),text.col='black')
title("投票の結果:都構想に賛成?反対?[mapplots::add.pie]")
#
#plotrixパッケージのfloating.pie関数
#
library(plotrix)
DD1 <- osakadata$賛成/(osakadata$賛成+osakadata$反対)
DD2 <- 1-DD1
rr <- (max(cents[,2])-min(cents[,2]))/20
plot(osaka,col="lightgray",xlab="",ylab="",axes=F)
box()
for (i in 1:nrow(osakadata)) {
# floating.pie(cents[i, 1], cents[i, 2], x=c(DD1[i],DD2[i]),radius=rr,col=c("lightblue","pink"),startpos=pi/2)
floating.pie(cents[i, 1], cents[i, 2], x=c(DD2[i],DD1[i]),radius=rr,col=c("pink","lightblue"),startpos=pi/2)
}
#凡例とタイトル
legend("topleft",legend=c("賛成","反対"),cex=1,fill=c("lightblue","pink"),text.col='black')
title("投票の結果:都構想に賛成?反対? [plotrix::floating.pie]")
par(mfrow=c(1,1))
#dev.off()