棒グラフ(Bar plots)とは、カテゴリー変数の頻度を縦方向や横方向に伸びる棒で表したグラフです。
基本的な棒グラフの作成
Rで棒グラフを作成する場合の基本形は以下のようになります。
barplot(データ)
barplot()関数を使って、棒グラフを作成するためには、データをテーブルに変換する必要があります。
テーブルへの変換には、table()関数を使います。
例えば、MASSパッケージのCars93のデータからType(=車のタイプ)を使用してtableを作成すには、
library(MASS)
table(Cars93$Type)
Compact Large Midsize Small Sporty Van
16 11 22 21 14 9
という風に、Cars93内に含まれる車のタイプ別テーブルができました。
実際に、棒グラフを作成する場合は、
barplot(table(データ))
で、テーブルと棒グラフを同時に作成するのがおススメです。
では早速、棒グラフを作成してみましょう。
barplot(table(Cars93$Type))
さらにオプションで、引数にhoriz = TRUEを追加すると、横向きの棒グラフ(帯グラフ)になります。
barplot(table(Cars93$Type),horiz = T)
もう少し、グラフを見栄え良く変更してみます。
最初の縦方向の棒グラフに以下の引数を追加します。
- ylim = c(0,25) :y軸の長さが足りていないので、Y軸を0~25に設定
- xlab = "Type":X軸のラベルを追加
- ylab = "Frequency":Y軸のラベルを追加
- axis.lty = "solid":x軸のラインが無いので、直線を追加
- space = 0.05 :棒グラフの間の間隔を広げる
上記を追加したグラフを作成するためのスクリプトは以下のようになります。
barplot(table(Cars93$Type),ylim=c(0,25), xlab="Type", ylab="Frequency", axis.lty = "solid", space = .05)
積み上げ棒グラフ(Stucked bar plot)
グラフデータが複数の項目からなっている場合、グラフは「積み上げ棒グラフ」となります。
例えば、先程のCar93データのTypeに生産国(USAかnon-USA)のデータを追加すると以下のような複数項目のデータとなります。
mydata <- table(Cars93$Type, Cars93$Origin)
mydata
USA non-USA
Compact 7 9
Large 11 0
Midsize 10 12
Small 7 14
Sporty 8 6
Van 5 4
このデータを同じようにbarplot()関数を使って棒グラフを作成します。この時、legendを引数に追加することで凡例を表示させます。
barplot(mydata, main="Type of Car(USA, Non-USA)", xlab="Origin", ylab="Frequency", col=rainbow(6), legend=rownames(mydata))
集合棒グラフ (grouped bar plot)
積み上げ棒グラフは項目別に縦に積み上げられていますが、集合棒グラフは項目別で横に棒が並んだグラフです。
barplot()関数を使って集合棒グラフを作るには、引数にbeside = TRUEを追加するだけです。
先程と同様に、mydataを集合棒グラフにしてみましょう。積み上げ棒グラフのスクリプトの最後に、beside = TRUEを追加してください。
barplot(mydata, main="Type of Car(USA, Non-USA)", xlab="Origin", ylab="Frequency", col=rainbow(6), legend=rownames(mydata), beside = TRUE)
mean bar plot
Rでは、単純に項目の合計や頻度を表す棒グラフ作成以外にも、バリエーション豊かな棒グラフを作成できます。
例えばaggregate()関数を使ってテーブルを上手く作成できれば、平均値を表す棒グラフも簡単に作成できます。
まず、aggregate()関数の基本形は以下の通りです。
aggregate(x, by, FUN)
- x: 集計する列
- by: カテゴリー別に集計する列を指定
- FUN: 関数
例えば、Cars93データの平均燃費=MPG(マイル/ガロン)をシリンダー数で分類してみましょう。
mean_MPG <- aggregate(Cars93$MPG.city, by=list(Cars93$Cylinders), FUN = mean)
さらに、order()関数を使って、平均燃費を小さい順で並び替えます。
order()関数の詳細はまたの機会にしますので、今回はコピペでお願いしますね。
mean_MPG <- mean_MPG[order(mean_MPG$x),]
棒グラフに表示
barplot(mean_MPG$x, names.arg=mean_MPG$Group.1)
この時、x軸の項目を表示するために、引数としてnames.arg = を追加
まとめ
Rを使った棒グラフ作成についてまとめてみました。今回はbase Rのplot()関数を使ったものを中心にまとめています。基本関数ですので、シンプルな形ばかりですね。またggplot2を使用した鮮やかな棒グラフについても紹介しますね。
コメント