ggplotで棒グラフを作る geom_bar()の使い方

Rでggplotを使って棒グラフを作る時に使われるのが, geom_bar()という関数です. このページでは, いくつかの例を元に, その使い方を解説していきます.

geom_bar()のaes()内で扱える引数

  • x
  • alpha
  • colour
  • fill
  • linetype
  • size
  • weight

geom_bar()の使い方の流れ

ggplotを使うのが初めての方は, 良かったら「ggplotの使い方」を参考にしてください. このページでは, ggplotの関数の中でも, 特にgeom_bar()関数の使い方の流れを説明していくつもりです.

今回は, 自分で作成した, 以下の様なデータを使っていきます. data.csvというファイルで保存しています.

name, height, years
A, 150, 2011
B, 170, 2011
C, 165, 2011
A, 160, 2012
B, 175, 2012
C, 165, 2012
A, 170, 2013
B, 180, 2013
C, 165, 2013
            

では, まず一番シンプルな棒グラフを作成してみます. geom_bar()はデフォルトでは, x軸のみを指定できて, その軸の要素に対する度数を測るようになっています. ということで, まずはheightに関する度数を棒グラフにして表してみましょう.

> library(ggplot2)
> data <- read.csv("data.csv")
> str(data)
'data.frame':   9 obs. of  3 variables:
 $ name  : Factor w/ 3 levels "A","B","C": 1 2 3 1 2 3 1 2 3
 $ height: int  150 170 165 160 175 165 170 180 165
 $ years : int  2011 2011 2011 2012 2012 2012 2013 2013 2013
> p <- ggplot(data, aes(x=factor(height)))
> p + geom_bar()
> ggsave("geom_bar1.png")
Saving 7 x 7 in image
            
geom_bar1.png

こんな感じです. ただ, 棒グラフを作るときには, x軸とy軸の両方に値を指定したいことが多いと思うので, 以下, そのやり方を解説していきます.

x, y軸両方に値を指定するには, geom_bar()の引数として, stat="identity"を指定しなければ行けません.

では, 2011年のデータに関して, x軸にname, y軸にheightをとってグラフを作ってみます. 下のコードでは, まず2011年のデータだけを集めていますが, 新しくファイルを作成して読み込んでも構いません.

> data2011 <- subset(data, years==2011)
> str(data2011)
'data.frame':   3 obs. of  3 variables:
 $ name  : Factor w/ 3 levels "A","B","C": 1 2 3
 $ height: int  150 170 165
 $ years : int  2011 2011 2011
> p <- ggplot(data2011, aes(x=name, y=height))
> p + geom_bar(stat="identity")
> ggsave("geom_bar2.png")
Saving 7 x 7 in image
            
geom_bar2.png

1行目はRsubset()関数を使用して, もとのデータからyears==2011という条件にあうデータだけをとってきています.

7行目で, x, y軸の値を指定しています.

8行目では, 引数にstat="identity"を指定したgeom_bar()関数を呼んでいます.

これで, x, y軸にそれぞれ値を指定して, 棒グラフを作ることが出来ました.

では, 次に視認性を上げるために色分けをしたいと思います. 例えば, nameごとに色の違う棒グラフを書きたければ, それを明示的に示します. geom_bar()では, グラフの枠と, 内部の2種類の色分けがあり, 以下のようになります.

> p <- ggplot(data2011, aes(x=name, y=height))
> p + geom_bar(stat="identity", aes(colour=name))
> ggsave("geom_bar3.png")
Saving 7 x 7 in image
>
> p + geom_bar(stat="identity", aes(fill=name))
> ggsave("geom_bar4.png")
Saving 7 x 7 in image
            
geom_bar3.png geom_bar4.png

次に, 棒グラフの枠線の種類を変えてみたいと思います. linetypeというパラメータを使います. 注意としては, 内部のと枠線との色が異なる色でないと, 見えなくなるので注意して下さい. 例では, 枠線の色が黒, 内部の色は白になるように指定します.

> p <- ggplot(data2011, aes(x=name, y=height))
> p + geom_bar(stat="identity", aes(linetype=name), colour="black", fill="white")
> ggsave("geom_bar5.png")
Saving 7 x 7 in image
            
geom_bar5.png

ここまでは, nameheightを使って棒グラフを作ってきましたが, このグラフを, 年度ごとに比較したいということはよくあると思います. では, 一番最初のデータを使って, 2011, 2012, 2013を比較したグラフをつくっていきたいと思います. ちなみに, geom_bar()の他に, facet_grid()という関数を使用しますが, このページでは詳しくは解説しません. 「 facet_grid(), facet_wrap()の使い方 」で解説していますので, 良かったら参考にして下さい.

> p <- ggplot(data, aes(x=name, y=height))
> p + geom_bar(stat="identity", aes(fill=name)) + facet_grid(. ~ years)
> ggsave("geom_bar6.png")
Saving 7 x 7 in image
            
geom_bar6.png

facet_grid()は, 指定した要素にしたがって, 枠で分けてくれる関数です. facet_grid(row ~ column)というように使います.

簡単に解説をすると, rowに入れた要素について, 枠を行分けし, colomnに入れた要素について枠を列で分けます. なので, ()内の, . ~ yearsは, yearsの要素について, 列方向に枠を分けるという意味になります. また, .は, どの要素についても枠でわけないことを示します.

geom_bar()の使い方はこんな感じになると思います.