賃金構造基本統計調査2

plotrix,ggplot2,grid パッケージ

記事賃金構造基本統計調査のコードを変更。

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
48
49
50
51
52
library(plotrix)
wage<-read.csv("http://statrstart.github.io/data/wage.csv",fileEncoding="utf8")
#男性
dm0 <- subset(wage, 性別=="男性", select=c(年,平均値等,年齢計))
#必要な行を取り出す。%in%
sel<-c("平均値","中位数","第1四分位数","第3四分位数")
dm0<-subset(dm0,平均値等 %in% sel)
#long->wide ここではreshape関数を使った。
dm<-reshape(dm0,idvar="年",timevar="平均値等",direction = "wide")
names(dm)<-gsub("年齢計.","",names(dm))
#png("wage2_01.png",width=1000,height=800)
par(mfrow=c(1,2),oma=c(1,0,3,0),xpd=T)
matplot(dm[,"年"],dm[,c("第1四分位数","中位数","第3四分位数")],
type="o",ylim=c(160,415),pch=16,col=c("black","blue","black"),
lty=c(2,1,2),lwd =c(1,2,1),cex = 2,xlab="",ylab="",las=1)
lines(dm[,"年"],dm[,c("平均値")],col="red",lwd=2)
points(dm[,"年"],dm[,c("平均値")],col="red",cex = 2,pch=17)
for (i in 1:nrow(dm)) {
segments(dm[,"年"][i],dm[,c("第1四分位数")][i],dm[,"年"][i],dm[,c("第3四分位数")][i])
}
boxed.labels(2007,350,"平均値",col="red",border=0)
boxed.labels(2007,312,"中位数",col="blue",border=0)
boxed.labels(2007,417,"第3四分位数",col="green",border=0)
boxed.labels(2007,240,"第1四分位数",col="green",border=0)
#(千円)を左上枠外に記入。xpd=Tの指定が必要。
text(par("usr")[1],par("usr")[4],"(千円)",pos=2,offset=0.2)
#サブタイトル(下)
title("","賃金の分布 (男性)")
#女性
dw0 <- subset(wage, 性別=="女性", select=c(年,平均値等,年齢計))
#sel<-c("平均値","中位数","第1四分位数","第3四分位数")
dw0<-subset(dw0,平均値等 %in% sel)
dw<-reshape(dw0,idvar="年",timevar="平均値等",direction = "wide")
names(dw)<-gsub("年齢計.","",names(dw))
matplot(dw[,"年"],dw[,c("第1四分位数","中位数","第3四分位数")],
type="o",ylim=c(160,415),pch=16,col=c("black","blue","black"),
lty=c(2,1,2),lwd =c(1,2,1),cex = 2,xlab="",ylab="",las=1)
lines(dw[,"年"],dw[,c("平均値")],col="red",lwd=2)
points(dw[,"年"],dw[,c("平均値")],col="red",cex = 2,pch=17)
for (i in 1:nrow(dw)) {
segments(dw[,"年"][i],dw[,c("第1四分位数")][i],dw[,"年"][i],dw[,c("第3四分位数")][i])
}
boxed.labels(2007,235,"平均値",col="red",border=0)
boxed.labels(2007,215,"中位数",col="blue",border=0)
boxed.labels(2007,272,"第3四分位数",col="green",border=0)
boxed.labels(2007,175,"第1四分位数",col="green",border=0)
text(par("usr")[1],par("usr")[4],"(千円)",pos=2,offset=0.2)
title("","賃金の分布 (女性)")
#2つのグラフにまたがるタイトル付けにはmtextを使う。
mtext("賃金構造基本統計調査",outer = T,side = 3,cex = 1.8,line = 0.1)
par(mfrow=c(1,1),oma=c(0,0,0,0),xpd=F)
#dev.off()

平均値,中位数,第1四分位数,第3四分位数を結んだ線を描かないならggplot2パッケージが便利。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
library(ggplot2)
wage<-read.csv("http://statrstart.github.io/data/wage.csv",fileEncoding="utf8")
dm <- subset(wage,select=c(年,性別,平均値等,年齢計))
sel<-c("平均値","中位数","第1四分位数","第3四分位数")
dm0<-subset(dm,平均値等 %in% sel)
dm0$性別 <- factor(dm0$性別, levels =c("男性","女性"))
dm0$平均値等 <- factor(dm0$平均値等, levels =c("第3四分位数","平均値","中位数","第1四分位数"))
#png("wage2_02.png",width=1000,height=800)
g<- ggplot(data =dm0,aes(x=年,y=年齢計,colour=平均値等,shape=平均値等)) +
geom_point() + geom_line(size = 1) +
coord_cartesian(ylim = c(160,420)) +
xlab("") + ylab("") +
facet_grid(. ~性別) +
ggtitle("賃金構造基本統計調査")
print(g)
#dev.off()

ポイントは levelsを指定して表示する順序を変更すること。

  • dm0$性別 <- factor(dm0$性別, levels =c(“男性”,”女性”))
  • dm0$平均値等 <- factor(dm0$平均値等, levels =c(“第3四分位数”,”平均値”,”中位数”,”第1四分位数”))
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
library(ggplot2)
wage<-read.csv("http://statrstart.github.io/data/wage.csv",fileEncoding="utf8")
dm <- subset(wage,select=c(年,性別,平均値等,年齢計))
sel<-c("平均値","中位数","第1四分位数","第3四分位数")
dm<-subset(dm,平均値等 %in% sel)
dm0 <- subset(dm, 性別=="男性", select=c(年,平均値等,年齢計))
g1<- ggplot(data =dm0, aes(x = 年, y = 年齢計, colour = 平均値等, shape = 平均値等)) +
geom_point() + geom_line(size = 1) +
coord_cartesian(ylim = c(160,420)) +
xlab("") + ylab("") +
theme(legend.position = "none") +
annotate("text",label="平均値",x=2007,y=350,colour="red") +
annotate("text",label="中位数",2007,312,colour="blue") +
annotate("text",label="第3四分位数",2007,417,colour="green") +
annotate("text",label="第1四分位数",2007,240,colour="green") +
ggtitle("賃金の分布 (男性) ")
dm0 <- subset(dm, 性別=="女性", select=c(年,平均値等,年齢計))
g2<- ggplot(data =dm0, aes(x = 年, y = 年齢計, colour = 平均値等, shape = 平均値等)) +
geom_point() + geom_line(size = 1) +
coord_cartesian(ylim = c(160,420)) +
xlab("") + ylab("") +
theme(legend.position = "none") +
annotate("text",label="平均値",x=2007,y=235,colour="red") +
annotate("text",label="中位数",2007,215,colour="blue") +
annotate("text",label="第3四分位数",2007,272,colour="green") +
annotate("text",label="第1四分位数",2007,175,colour="green") +
ggtitle("賃金の分布 (女性) ")
library(grid)
#png("wage2_03.png",width=1000,height=800)
grid.newpage()
pushViewport(viewport(layout=grid.layout(1, 2)))
print(g1, vp = viewport(layout.pos.row=1,layout.pos.col=1))
print(g2, vp = viewport(layout.pos.row=1,layout.pos.col=2))
#dev.off()