グラフをつくる際によく用いられるのはExcelやGoogle Spread Sheetだと思うが、見栄えの調整を手で行わなければならないのと、大量のデータ処理には時間がかかるので、そろそろRに移行しようと思っている(心情の吐露)。
今回は、Rで描画する場合スタンダードとされているggplot2パッケージを利用して帯グラフを作ってみた。
使うのは標準で組み込まれているUCBAdmissionsデータだ。 データフレームに変換し要約統計量をみる。
ucb<-data.frame(UCBAdmissions)
dim(ucb)
## [1] 24 4
まず、観察数は24、変数は4つあるようだ。
summary(ucb)
## Admit Gender Dept Freq
## Admitted:12 Male :12 A:4 Min. : 8.0
## Rejected:12 Female:12 B:4 1st Qu.: 80.0
## C:4 Median :170.0
## D:4 Mean :188.6
## E:4 3rd Qu.:302.5
## F:4 Max. :512.0
それぞれの変数と具体的な分布は以上のようになっている。学部ごとに、落ちた人・受かった人×女性・男性の4パターンがあるということだろう。それぞれの人数が、Freq変数に収められている。
このデータは、本来であれば入試の男女差別などを調べるのに適したデータなのだろうが、今回は入学した人の男女比を学部別に見ていくことにしたい。日本以外の大学の学部の男女比とかよく知らないから面白そうだなーと思ったのである。
今回は標準で付いている整形済みのデータなので整然データに直す必要はないが、ggplot関数を発動させる前に、下準備を少しする必要がある。
#入学者だけのサブセットを作る
ucb.students<-subset(ucb, subset = (ucb$Admit=="Admitted"), select=c("Gender", "Dept", "Freq"))
#一番上にくるA学部で男性の方が多いので、男性がグラフで左側に来るようにジェンダーの順序を固定した変数に変換
ucb.students$Gender.b<-factor(ucb.students$Gender, levels = c("Female", "Male"))
#学部の順序を固定した変数に変換
ucb.students$Dept.b<-factor(ucb.students$Dept, levels = c("F", "E", "D", "C", "B", "A"))
まず今回は入学者のデータしか使わないから、入学者のみのサブセットを作る。また、下の2行はグラフの順序を整えるために、後から付け加えたものだが、こちらに書いておく。
library(ggplot2)
p<-
#データと描画空間の設定
ggplot(ucb.students, aes(x=Dept.b, y=Freq, fill=Gender.b))+
#種類を棒グラフに設定
geom_bar(stat = "identity") +
#テーマの設定、サイズを決める、日本語対応させる
theme_classic(base_size = 10, base_family = "HiraKakuProN-W3")+
#軸ラベルとタイトルをつける
xlab("学部")+ylab("新入生数")+ggtitle("UCバークレーの学部別新入生数と男女比")+
#色と凡例名、凡例順序の指定 #RColorBrewer::display.brewer.all()で確認できる
scale_fill_brewer(palette = "Dark2",name=NULL, breaks=c("Male", "Female"), labels=c("男性", "女性"))+
#ひっくり返して帯グラフに
coord_flip()+
#観察数のラベルつける
geom_text(aes(label = Freq), size = 4, color="white", position=position_stack(vjust=0.5))
#出力
print(p)
無事出力された。男女比をみると、A,B学部を除くと、女性の方が多いかほぼ同じくらいである。しかし、人数の多いA,B学部でかなり比が偏っているので、全体としては女性が少ないように見える。具体的にどこが何学部か、調べればわかるんだろうが、そこまではしません。
ちなみに何年のデータなんだろう? help(UCBAdmissions)
で調べると、1973年らしい。古っ。道理で女性が少なすぎると思ったんだ。
参考にしたサイトがたくさんあるので紹介するとともに備忘録としておく。
ggplotのテーマとタイトル周りに関して、ggplot2 — きれいなグラフを簡単に合理的に
凡例周りに関して、ggplot2で凡例のラベルと項目名を操作する
ラベル付けに関して、ggplot2 column : How to center stacked percent barchart labels
グラフの積み上げ順序に関して、ggplot2の積み上げグラフで並び順を手動で設定する方法