ggplotでの積み上げグラフの作り方
Rのggplotでの積み上げグラフの作り方を解説します. 積み上げグラフは, 積み上げ棒グラフと積み上げ折れ線グラフ(名前が正しいかわかりません), 積み上げヒストグラムの3種類を扱います. 積み上げ棒グラフではgeom_bar(), 積み上げ折れ線グラフではgeom_area(), 積み上げヒストグラムではgeom_histogram()使用します.
使用するデータ
今回は次のようなデータセットを使うことにします.
season,subject,point spring,english,60 summar,english,70 autumn,english,80 winter,english,90 spring,math,80 summar,math,75 autumn,math,90 winter,math,100 spring,science,50 summar,science,55 autumn,science,40 winter,science,80
あれですね, 正しくはsummerですね. 間違えました. ごめんなさい.
積み上げヒストグラムでは, diamondsというデータセットを使用します.
積み上げ棒グラフの作り方
ではまず積み上げ棒グラフを作ってみましょう. ここで使うのは基本的にはgeom_bar()のみです. 今回の作り方の考え方は以下のようになります.
- x軸をseasonごとにごとに分けた棒グラフを作る
- このとき, 全ての教科の点数の和がy軸になる
- 作った棒グラフを教科ごとに色分けする
ということで, まずは通常の棒グラフを作ってみましょう. 棒グラフの作り方は, 「棒グラフの作り方」で解説しているので, よろしければ参考になさって下さい. ここではグラフを作るためのコマンドのみを以下に書きます. 棒グラフに関しての説明は省略します.
> data <- read.csv("data") > str(data) 'data.frame': 12 obs. of 3 variables: $ season : Factor w/ 4 levels "autumn","spring",..: 2 3 1 4 2 3 1 4 2 3 ... $ subject: Factor w/ 3 levels "english","math",..: 1 1 1 1 2 2 2 2 3 3 ... $ point : int 60 70 80 90 80 75 90 100 50 55 ... > p <- ggplot(data, aes(x=season, y=point)) > p + geom_bar(stat="identity") + scale_x_discrete(limits=c("spring", "summar", "autumn", "winter")) > ggsave("ggplot_stack1.png") Saving 7 x 7 in image

8行目でscale_x_discrete()という関数を使っていますが, これはx軸の値の順序を変えるための関数です. 詳しくは「軸の値の順番の変え方」で解説しています.
さて, このグラフでは, 当初の予定通りx軸はseason, y軸は3教科の合計を表していますので, これを教科ごとに色分けすれば, 積み上げグラフの出来上がりです.
> p + geom_bar(stat="identity", aes(fill=subject)) + scale_x_discrete(limits=c("spring", "summar", "autumn", "winter")) > ggsave("ggplot_stack2.png") Saving 7 x 7 in image

先ほどのコードと変えたのは, geom_bar()の引数にaes(fill=subject)の部分だけです. これは, subjectに関して色分けをするように指定しているだけです.
これで, 積み上げ棒グラフができました. geom_bar()を理解していればそこまで複雑ではないですね. 次は, 折れ線積み上げグラフを見て行きましょう.
積み上げ折れ線グラフの作り方
データセットは先ほどと同じものを使用します. そしてここではgeom_area()という関数を使います. そしてコマンドもそこまで変わりません.
> p <- ggplot(data, aes(x=season, y=point)) > p + geom_area(aes(group=subject, fill=subject)) + scale_x_discrete(limits=c("spring", "summar", "autumn", "winter")) > ggsave("ggplot_stack3.png") Saving 7 x 7 in image

geom_bar()の時と違うところは, stat="identity"の部分がないところと, aes()の引数にgroup=subjectがあるところです.
stat="identity"の部分に関しては, geom_bar()を使うために入れたものなので今回は必要がないです. group=subjectが必要なのは, データセットを見ただけではgeom_area()はどのデータをつなげればよいかわからないため, それを指定しています. この例では, 教科ごとに分けて領域を描いてほしいので, subjectを指定しました.
積み上げヒストグラムの作り方
データセットはdiamondsを使用します. そしてここではgeom_histogram()という関数を使います. そしてコマンドもやっていることはこれまでの2つとそこまで変わりません. というかとても簡潔です.
> p <- ggplot(diamonds, aes(x=cut)) > p + geom_histogram(aes(fill=color)) > ggsave("ggplot_stack4.png") Saving 7 x 7 in image

1行目でヒストグラムのためのx軸の要素を指定して, 2行目でヒストグラムの作成と, colorという要素での色分けをしているだけです. 今回は軸の値の順序を変えていないため, scale_x_discrete()のところはなくなります.