統計検定に関する事柄を忘れないようにまとめます.

棒グラフはコマンド barplot() にて作成する.barplot(data) のように data の部分に描画したいデータを指定する.ベクトルまたは行列形式のデータを読み込むことができる.ベクトルを与えた場合は,各要素の値が棒の高さ (長さ) として描画される.行列を与えた場合は,オプションにより,積み上げ棒グラフかグループごと (列ごと) に要素がまとめられた棒グラフが描かれる.

最初に,以下のコマンドにてベクトル型および行列型のデータを準備する.mv がベクトル,dm が2行5列の行列である.

$ mv=c(10,20,40,80,160)
$ dm=matrix(c(5,16,7,8,9,4,11,2,13,1),2,5)

簡単な描画

最も簡単に棒グラフを描くには以下のようにコマンドを打つ.行列型のデータに対し,beside=T を指定すると各列ごとのグループにてまとめられた棒グラフが描ける.一方で,beside=T を指定しない場合は積み上げ型の棒グラフになる.

$ barplot(mv)
$ barplot(dm)
$ barplot(dm,beside=T)

結果はそれぞれ以下のようになる.

ida_r_barplot_01.svg

水平グラフを描くためには以下のように horiz オプションを加える.

barplot(mv,horiz=T)

結果は以下のようになる.

ida_r_barplot_02.svg

図の装飾

以下のようなオプションを付けるときれいなグラフを描くことができる.オプション names.arg では各要素の名前を指定できる.col では,各要素の背景色を指定する.main ではグラフのタイトルを,xlab ではX軸のラベルを,ylab ではY軸のラベルを指定する.ylim はY軸の表示範囲を決めるためのオプション.axis.lty ではX軸の表示スタイルを指定できる.las では軸目盛および各項目の表示スタイルを指定できる.font.mainfont.labfont ではそれぞれタイトル,軸ラベル,軸項目のフォントを指定する.cex.maincex.labcex.namescex.axis ではそれぞれ,タイトル,軸ラベル,項目名 (X軸),軸目盛 (Y軸) のフォントサイズを指定する.2番目のコマンド box() はグラフに枠線を加えるコマンド.R におけるデフォルトのY軸目盛 (数値) は,Y軸と平行に表示されているが,lasを指定することで90°回転させ,X軸と平行に表示させることができる.

$ barplot(mv, names.arg=c("a","b","c","d","e"), col=c("red", "blue", "yellow", "green", "purple"), main="Barplot", xlab="Entry", ylab="Value", ylim=c(0,200), axis.lty=1, las=1, font.main=15, font.lab=15, font=15, cex.main=3, cex.lab=1.2, cex.names=1.2, cex.axis=1.2)
$ box(lty=1)

結果は以下のようになる.

ida_r_barplot_03.svg

標準偏差の追加

以上の項目 a,b,c,d,e の標準偏差がそれぞれ 5,5,10,20,20 であった場合に上の棒グラフにその情報を追加する.最初に,各項目の標準偏差を格納した変数 sdv を作成する.

sdv=c(5, 5, 10, 20, 20)

以上の標準偏差をグラフに反映させるには以下のようにする.まず,上の棒グラフを描画するためのコマンドを何か適当な変数,以下では barplot に格納する.次に,コマンド arrows にてエラーバーを追加する.以下の mv+sdv および mv-sdv が mean ± SD を意味する.

$ barplot=barplot(mv, names.arg=c("a","b","c","d","e"), col=c("red", "blue", "yellow", "green", "purple"), main="Barplot", xlab="Entry", ylab="Value", ylim=c(0,200), axis.lty=1, las=1, font.main=15, font.lab=15, font=15, cex.main=3, cex.lab=1.2, cex.names=1.2, cex.axis=1.2)
$ arrows(barplot, mv-sdv, barplot, mv+sdv, code=3, lwd=1, angle=90, length=0.1)
$ box(lty=1)

結果は以下のようになる.

ida_r_barplot_04.svg

オプション一覧

その他のオプションには以下のようなものがある.

オプション詳細使用例
height読み込むデータの指定 (必須)height=mv
width各項目の棒の太さの指定width=c(1, 2, 3, 5, 8)
space棒と棒との間隔の指定.行列形式のデータを"beside=T"で読み込んだ場合はベクトルの最初の数値でグループ内の棒の間隔,次の数値でグループ間の棒の間隔の指定.space=c(2, 5)
names.arg各項目の名前の指定names.arg=c("a", "b", "c")
legend.text凡例の指定legend.text=c("foo", "bar, "baz")
beside行列形式のデータを読み込んだ際,"T"の場合は並列棒グラフ,"F"の場合は積み上げ棒グラフを描画beside=T
horizTかFにて垂直棒グラフか水平グラフかの指定horiz=T
density棒グラフの斜線の濃さの指定.数値またはベクトルにて指定density=20
angle"density"で指定した斜線の角度の指定.数値またはベクトルにて指定angle=c(30, 45, 60)
col棒の色の指定col=c("red", "blue", "yellow")
border棒の枠線の有無の指定border=F
mainグラフのタイトルの指定main="タイトル"
subグラフのサブタイトルの指定sub="サブタイトル"
xlabX軸のラベルの指定xlab="Entry"
ylabY軸のラベルの指定ylab="Value"
xlimX軸の表示範囲の指定.ベクトルで指定ylim=c(0, 10)
ylimY軸の表示範囲の指定.ベクトルで指定ylim=c(0, 200)
log"x"または"y"または"xy"を指定することで,指定した軸を対数軸にて表示するlog="y"
axis.ltyX軸の表示スタイルを指定axis.lty=1
las軸目盛および各項目の表示スタイルを指定.0,1,2,3の数値で指定.デフォルトでは全軸の項目ラベル (目盛) は各軸に対して平行.las=1 を指定すると,各項目 (目盛) が全て水平に位置し Excel と同じになる.las=1
font.mainグラフのタイトルのフォントの指定font.main=15
font.subサブタイトルのフォントの指定font.sub=2
font.lab軸ラベルのフォントの指定font.lab=15
font軸項目および目盛のフォントの指定font=15
cex.mainグラフのタイトルのフォントサイズの指定cex.main=4
cex.subサブタイトルのフォントサイズの指定cex.sub=1
cex.lab軸ラベルのフォントサイズの指定cex.lab=1.6
cex.names軸項目のフォントサイズの指定cex.names=1.2
cex.axis目盛のフォントサイズの指定cex.axis=1.2
Hatena Google+