Rによる箱ひげ図の描画
箱ひげ図はコマンド boxplot() にて作成する.使い方は大きく分けて3通りある.ひとつ目は,boxplot(ベクトル1, ベクトル2, ベクトル3, ...) のように,各項目のデータが格納されているベクトル形式の変数を直接指定する方法,ふたつ目は,boxplot(リスト) のように,各項目のデータが格納されているリスト形式 (または,行列形式) の変数を読み込む方法,最後は,boxplot(value ~ group, data=データフレーム) のように読み込むデータフレームと項目およびそのデータを式で指定する方法である.
以下のようなそれぞれが50要素からなるデータA,B および C が得られたとき,箱ひげ図を描く.
最初に,以上のデータを変数に読み込む.数値データの読み込みにはコマンド scan が便利である.まず,上のデータAをコピーして,以下のコマンドを打つことで変数 da にデータAを読み込む.このような方法でなくても,ファイル名を指定して読み込んでも良い.その場合は,ファイルが存在するディレクトリに移動して,scan("a.txt") のようにコマンドを打つ.
$ da=scan("clipboard")
次に,上のデータBをコピーして,以下のコマンドを打つことで変数 db にデータBを読み込む.この方法なら Excel からコピーしたデータもそのまま読み込める.
$ db=scan("clipboard")
データCも同様に変数 dc に読み込む.
$ dc=scan("clipboard")
また,これらのベクトルを格納したリスト形式の変数 list も以下のように作成する.
$ list=list(A=da, B=db, C=dc)
簡単な描画
最も簡単に箱ひげ図を描くには以下1行目または2行目のようにコマンドを打つ.
$ boxplot(da, db, dc) $ boxplot(list)
結果はそれぞれ以下のようになる.図の左からデータA,B,Cの箱ひげ図である.箱ひげ図の中央の太線はデータの中央値 (メディアン) を示す.箱の最上端は第3四分位数,箱の最下端は第1四分位数をあらわす.また,上側のひげおよび下側のひげはデフォルトの設定では,(第1四分位数-1.5*(第3四分位数-第1四分位数)) 以上 (第3四分位数+1.5*(第3四分位数-第1四分位数)) 以下の範囲で,それぞれ最も大きいデータ点および最も小さいデータ点を指す.丸はひげより大きいデータ点または小さいデータ点,すなわち外れ値をあらわす.
図の装飾
コマンド boxplot() には様々なオプションが用意されており,それらを用いるとより綺麗なグラフが描ける.オプション name では各要素の名前をベクトル形式にて指定することで要素の名前を指定できる.col にて各要素のボックスの色をベクトル形式で指定する.色の名前を red のように指定することもできるし,以下のように RGB で指定することもできる.main にてグラフのタイトルを,xlab にてX軸のラベルを,ylab にてY軸のラベルを指定する.ylim にてY軸の表示範囲をベクトル形式で指定する.width では箱の幅を,staplewex ではひげの幅を変更できる.
$ boxplot(list, names=c("A", "B", "C"), col=c("#993435", "#edae00", "#539952"), main="Boxplot", xlab="Entry", ylab="Value", ylim=c(0.2, 1), width=c(1.1, 1.1, 1.1), staplewex=0.8)
結果は以下のようになる.
また,コマンド par を用いるとグラフの詳細なグラフィックスの調整ができる.las にて軸目盛および各項目の表示スタイルを変更する.las=1 を指定するとX軸およびY軸の全ての数値目盛を水平に表示する.font.main にてタイトルのフォントを,font.lab では軸ラベルのフォントを,font.axis にて軸項目のフォントを指定する.cex.main にてタイトルのサイズを,cex.lab にて軸のラベルのサイズを,cex.axis にて軸目盛のサイズを指定する.以上のコマンドを以下の1行目で打ち,2行目で上と同じ箱ひげ図の描画コマンドを打つ.以下のコマンド par 内の cex.main 以降は2行目の boxplot() のオプションとしても直接指定できる.また,font.main,font.lab,font.axis も boxplot() のオプション pars にて pars=par(font.main=15) のようにすると boxplot のオプションとして指定できる.
$ par(font.main=15, font.lab=15, font.axis=15, cex.main=3, cex.lab=1.2, cex.axis=1.2, las=1) $ boxplot(list, names=c("A", "B", "C"), col=c("#993435", "#edae00", "#539952"), main="Boxplot", xlab="Entry", ylab="Value", ylim=c(0.2, 1), width=c(1.1, 1.1, 1.1), staplewex=0.8)
結果は以下のようになる.
他にも様々なオプションがある.horizontal にて箱ひげ図を水平表示できる.border にて箱の枠線とひげの色を指定できる.notch では箱にノッチ (切り込み) を入れるかどうかを指定する.range ではひげが箱からどれだけ離れるかを指定できる.デフォルトでは range=1.5 が指定されており,これは,上側のひげは '第3四分位数+1.5*(第3四分位数-第1四分位数)' 以下の最も大きいデータ点,下側のひげは '第1四分位数-1.5*(第3四分位数-第1四分位数)' 以上の最も小さいデータ点をひげとすることを意味する.
$ boxplot(list, names=c("A", "B", "C"), col=c("#993435", "#edae00", "#539952"), main="Boxplot", xlab="Value", ylab="Entry", ylim=c(0.2, 1), width=c(1.1, 1.1, 1.1), staplewex=0.8, horizontal=T, border="cyan4", notch=T, range=1)
結果は以下のようになる.
データフレームを使った図の描画
また,以上のようにベクトル形式またはリスト形式のデータを読み込む方法ではなく,データフレームと式を入力としてプロットする方法もある.Rにあらかじめ用意されているデータフレーム iris には150標本のアヤメの Sepal.Length,Sepal.Width,Petal.Length,Petal.Width という4種類の各標本の特徴量とその特徴量を持つアヤメが属する3種類の Species の情報が格納されている.このデータフレーム中の Sepal.Length をデータ点,Species をグループとしてボックスプロットを描くには以下のようにする.
$ boxplot(Sepal.Length ~ Species, data=iris, xlab="Species", ylab="Sepal.Length")
結果は以下のようになる.Species ごとに区切られた Sepal.Length の箱ひげ図ができる.
オプション一覧
その他のオプションには以下のようなものがある.
オプション | 詳細 | 使用例 |
---|---|---|
x | 読み込むデータの指定 (下の formula を指定しないとき,必須).ベクトル,またはベクトルを格納したリスト,またはベクトルを格納したマトリックス形式の変数で指定 | x=list または x=da, db, dc |
formula | 描画するデータの式を指定 (上のxを指定しないとき,必須).y ~ group のように指定すると,y というデータ点をgroupごとに区切って箱ひげ図が描画される. | formula= y ~ group |
data | 上の formula を指定するとき必須.formula で指定するデータフレームを指定. | data=iris |
range | ひげが箱からどれだけ離れるかを数値で指定.デフォルトは1.5.このとき,上側のひげは '第3四分位数+1.5*(第3四分位数-第1四分位数)' 以下の最も大きいデータ点,下側のひげは '第1四分位数-1.5*(第3四分位数-第1四分位数)' 以上の最も小さいデータ点を指す. | range=2 |
width | 箱の幅を指定.ベクトル形式で指定すると項目ごと,数字で指定すると一括で設定される. | width=1.2 |
varwidth | 各項目における箱の幅を各項目のサンプルサイズの平方根に比例させて表示.TまたはFで指定. | varwidth=T |
notch | 箱にノッチ (切り込み) を入れるかどうかをTまたはFで指定 | notch=T |
outline | 外れ値 (ボックスプロット中の丸) を表示するかしないかをTまたはFで指定 | outline=F |
names | 各項目の名前をベクトル形式で指定 | names=c("foo", "bar", "baz") |
boxwex | 各項目の箱が互いに重ならないときの最大の箱の幅を1としたときに,それに対する箱の幅を数値で指定. | boxwex=0.8 |
staplewex | 箱の幅に対するひげのサイズを指定.ベクトル形式または数字で指定. | staplewex=1.2 |
outwex | 箱の幅に対する外れ値線の幅の指定 | outwex=0.8 |
plot | グラフをプロットするかしないかをTまたはFで指定.デフォルトは当然T.Fを指定すると箱ひげ図の統計量を表示. | plot=F |
border | 箱の枠線およびひげの色指定.ベクトル形式で指定すると項目ごと,1色だけ指定すると一括で色を指定. | border="red" |
col | 箱の色の指定.ベクトルを指定すると各項目がそれぞれの色で表示,1色だけ指定すると全項目がその色で表示.色名,RGB,番号にて指定. | col=c("red", "#123123", "green") |
log | "x","y" または "xy" を指定することで,指定した軸を対数軸にて表示する | log="y" |
pars | フォント等を設定するグラフィックパラメーターを指定 | pars=par(font.main=15, font.lab=15, font.axis=15) |
horizontal | 箱ひげ図を縦に描くか横に描くかをF (縦) またはT (横) で指定.デフォルトは F (縦) | horizontal=F |
add | 現在のプロット領域に箱ひげ図を追加するかどうかをTまたはFで指定 | add=F |
at | 上で add=T を指定したとき,箱ひげ図を描く位置をベクトルで指定 | at=c(1, 2, 3, 4) |
las | 軸目盛および各項目の表示スタイルを指定.0,1,2,3の数値で指定.デフォルトでは全軸の項目ラベル (目盛) は各軸に対して平行.las=1 を指定すると,各項目 (目盛) が全て水平に位置し Excel と同じになる. | |
xlab | X軸のラベルの指定 | xlab="sample number" |
ylab | Y軸のラベルを指定 | ylab="km/h" |
main | グラフのタイトルを指定 | main="Experiment 2009.02.15" |
ylim | Y軸目盛の表示範囲をベクトル c(最小値, 最大値) にて指定 | ylim=c(0.2, 1) |
cex.main | グラフのタイトルのフォントサイズの指定 | cex.main=4 |
cex.lab | 軸ラベルのフォントサイズの指定 | cex.lab=1.6 |
cex.axis | 目盛のフォントサイズの指定 | cex.axis=1.2 |
yaxt | Y軸目盛の有無を設定 | yaxt="n" |