グラフィックス参考実例集:箱型図 boxplot

(グラフィックス参考実例集に戻る。Rのグラフィックスパラメータを参照する。)

ご存知(とはいえ世間での認知度はほとんど零)箱型図(箱ひげ図)。関数boxplotは箱ひげ図と呼ばれるグラフを作図します。このグラフは、いくつかのデータの分布の違いを比較するのに有効です。 boxplotは任意個の引数をとって、それぞれに対する箱ひげ図を描きます。上下のひげは、それぞれ上(下)側四分位数の位置から、極値までの間に引かれます。極値とは、上(下)側四分位数から四分位範囲の 1.5 倍以内にあるデータのうちの最大(小)値です。極値よりも大きい、または小さい値は外れ値としてひげの先にプロットされます。 なお、boxplotにold=Tと指定することによって、S version 3.2 以前と同じスタイルの箱ひげ図を描くことができます。


把っ手(notches) 付きの箱型図

boxplot1 <- function() {
  #モデル公式による箱型図
  oldpar <- par(no.readonly = TRUE) # 現在のグラフィックスパラメータ退避
  on.exit(par(oldpar)) # (関数がエラー中断しても) 終了時にパラメータ復帰
  data(InsectSprays) # データ読み込み
  png("boxplot1.png") # png デバイスを開く
  boxplot(count ~ spray, data = InsectSprays, col = "lightgray")
  boxplot(count ~ spray, data = InsectSprays,
          notch = TRUE, add = TRUE, col = "blue")
  dev.off() # デバイスを閉じる
}
 left

箱型図に平均+標準偏差範囲を矢印で加える

boxplot2 <- function() {
  oldpar <- par(no.readonly = TRUE) # 現在のグラフィックスパラメータ退避
  on.exit(par(oldpar)) # (関数がエラー中断しても) 終了時にパラメータ復帰
  data(OrchardSprays) # データ読み込み
  png("boxplot2.png") # png デバイスを開く
  # 箱型図(縦軸は対数目盛)
  # 箱型図の基本情報取り出しのため変数 rb に付値
  rb <- boxplot(decrease ~ treatment, log="y", data = OrchardSprays, col="bisque")
  title("Comparing boxplot()s and non-robust mean +/- SD")
  # 各ブロックの平均値と標準偏差のベクトル計算
  mn.t <- tapply(OrchardSprays$decrease, OrchardSprays$treatment, mean)
  sd.t <- tapply(OrchardSprays$decrease, OrchardSprays$treatment, sd)
  # 箱の中心の x 座標
  xi <- 0.3 + seq(rb$n)
  # 平均値を点プロット
  points(xi, mn.t, col = "orange", pch = 18)
  # 平均値±標準偏差の範囲を矢印で図示
  arrows(xi, mn.t - sd.t, xi, mn.t + sd.t,
         code = 3, col = "pink", angle = 75, length = .1)
  dev.off() # デバイスを閉じる
}
 left

行列を元に箱型図を描く

boxplot3 <- function() {
  oldpar <- par(no.readonly = TRUE) # 現在のグラフィックスパラメータ退避
  on.exit(par(oldpar)) # (関数がエラー中断しても) 終了時にパラメータ復帰
  ## 各種分布によるそれぞれ100個の疑似乱数を並べた行列
  mat <- cbind(Uni05 = (1:100)/21, Norm = rnorm(100),
               T5 = rt(100, df = 5), Gam2 = rgamma(100, shape = 2))
  png("boxplot3.png") # png デバイスを開く
  boxplot(data.frame(mat), main = "boxplot(data.frame(mat), main = ...)")
  par(las=1) # 軸ラベルをすべて水平に
  boxplot(data.frame(mat), main = "boxplot(*, horizontal = TRUE)",
          horizontal = TRUE)
  dev.off() # postscript デバイスを閉じる
  sd.t <- tapply(OrchardSprays$decrease, OrchardSprays$treatment, sd)
  # 箱の中心の x 座標
  xi <- 0.3 + seq(rb$n)
  # 平均値を点プロット
  points(xi, mn.t, col = "orange", pch = 18)
  # 平均値±標準偏差の範囲を矢印で図示
  arrows(xi, mn.t - sd.t, xi, mn.t + sd.t,
         code = 3, col = "pink", angle = 75, length = .1)
  dev.off() # デバイスを閉じる
}
 left

オプション `at = ' の使用法

boxplot4 <- function() {
  data(ToothGrowth) # データ読み込み
  ## 箱の中心位置を at で指定
  ## VC を与えた結果だけをまず描く(オプション subset= supp == "VC")
  png("boxplot4.png") # png デバイスを開く
  boxplot(len ~ dose, data = ToothGrowth,
          boxwex = 0.25, at = 1:3 - 0.2,
          subset= supp == "VC", col="yellow",
          main="Guinea Pigs' Tooth Growth",
          xlab="Vitamin C dose mg",
          ylab="tooth length", ylim=c(0,35))
  ## オプション add=TRUE で重ね描き指定
  ## オレンジジュースを与えた結果を次に描く(オプション subset = supp == "OJ")
  boxplot(len ~ dose, data = ToothGrowth, add = TRUE,
          boxwex = 0.25, at = 1:3 + 0.2,
          subset= supp == "OJ", col="orange")
  ## 凡例を加える
  legend(2, 9, c("Ascorbic acid", "Orange juice"),
         fill = c("yellow", "orange"))
  dev.off() # デバイスを閉じる
}
 left

箱型図を軸の修飾に使う(Statistiques avec R より、2004.3.4)

おまけにラグプロットまで。どうするとこういう使い方を思いつけるのか、ただ脱帽。注意すると最初に layout 関数で作図領域を4分割し、そのうちの3つに順に本図、y データの箱型図、x データの箱型図を描いている!

data(cars)
op <- par()
layout( matrix( c(2,1,0,3), 2, 2, byrow=T ), c(1,6), c(4,1),)
par(mar=c(1,1,5,2))
plot(cars$dist ~ cars$speed, xlab='', ylab='', las = 1)
rug(side=1, jitter(cars$speed, 5) )
rug(side=2, jitter(cars$dist, 20) )
title(main = "cars data")
par(mar=c(1,2,5,1))  # この使い方がすごい boxplot を置く領域を指定している
boxplot(cars$dist, axes=F)
title(ylab='Stopping distance (ft)', line=0) # その領域にタイトルを置く工夫
par(mar=c(5,1,1,2)) # 同じく x 軸の下に boxplot を置く領域を指定している
boxplot(cars$speed, horizontal=T, axes=F)
title(xlab='Speed (mph)', line=1)
par(op)
 left

添付ファイル: fileboxplot3.png 3530件 [詳細] fileboxplot2.png 1945件 [詳細] fileboxplot1.png 3871件 [詳細] fileboxplot4.png 3916件 [詳細] filebxprug.jpg 3547件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-03-25 (土) 11:19:16