ggplot2を利用したボックスプロットの描き方

geom_boxplot

ggplot でボックスプロットを描くとき geom_boxplot を利用する。

ボックスプロットの基本的な描き方

サンプルデータを利用してボックスプロットを描く例。サンプルデータは 3 つのデータ正規化法(TMM、TbT、DEGES)を比べた時、その性能を測ったものである。

library(reshape2)
library(ggplot2)

# データの準備
data <- read.table("https://stats.biopapyrus.jp/r/basic/file.html", header = TRUE)
head(data)
##         TMM       TbT     DEGES
## 1 0.8699722 0.8942772 0.8950699
## 2 0.8709867 0.8990545 0.8993902
## 3 0.8707963 0.8997104 0.9003468
## 4 0.8703474 0.8969272 0.8981905
## 5 0.8733667 0.9012670 0.9027648
## 6 0.8719489 0.8992310 0.8998567


# ggplot 用のデータフレームを作成
df <- melt(data)
head(df)
##   variable     value
## 1      TMM 0.8699722
## 2      TMM 0.8709867
## 3      TMM 0.8707963
## 4      TMM 0.8703474
## 5      TMM 0.8733667
## 6      TMM 0.8719489


# 描画キャンパスを作成
g <- ggplot(
  df,                           # ggplot2 用のデータフレーム
  aes (                         # 座標の設定情報
    x = variable,               # x 座標に df$variable を指定
    y = value                   # y 座標に df$value を指定
  )
)
g <- g + geom_boxplot()         # 座標情報をもとにboxplotを作成
g <- g + ggtitle("Accuracy")    # グラフタイトル
g <- g + xlab("Method")         # x軸ラベル
g <- g + ylab("ACC")            # y軸ラベル

plot(g)
ggplot2によるボックスプロット

geom_boxplot のオプション調製例。

g <- ggplot(
  df,             
  aes (
    x = variable,
    y = value
  )
)
g <- g + geom_boxplot(
  notch = TRUE,                                # 中央値を示す線の長さを調整出来るようする(省略する場合は FALSE)
  notchwidth = 0.5,                            # 中央値の長さを指定します(notch = TRUE の時に有効)
  outlier.colour = "black",                    # 外れ値の色
  outlier.shape = 4,                           # 外れ値のプロットタイプ(pch)
  outlier.size = 4,                            # 外れ値のプロットのサイズ
  color = c("#669900", "#f20c00", "#0080c0")   # ボックスプロットの色
)

plot(g)
ggplot2によるボックスプロットオプション調整

複数のボックスプロットを横に並べる方法

複数のボックスプロットを横に並べて描く方法。用いるサンプルデータは、ラットに 3 種類の餌(PF、C、G)を与えて、7 日間の体重を測ったものである。それぞれの実験群には 5 個体のラットがある。

library(reshape2)
library(ggplot2)

# データの読み込み
x <- read.table("https://stats.biopapyrus.jp/data/", header = TRUE)

# データを ggplot2 用に整形します
df <- melt(x)

# ggplot2 描画レイヤー
g <- ggplot(df, aes(x = variable, y = value))
g <- g + geom_boxplot(aes(colour = type))

# 描画
plot(g)
ggplot2で描くボックスプロット

box plot + jitter plot

ボックスプロットとデータの実際の値を重ねて表示することもできる。

library(reshape2)
library(ggplot2)

data <- read.table("http://stat.biopapyrus.net/data/accuracy.txt", header = TRUE)
head(data)
df <- melt(data)

g <- ggplot(df, aes(x = variable, y = value))
g <- g + geom_boxplot(outlier.shape = NA)
g <- g + geom_jitter(size = 0.2)
g <- g + xlab("Method")
g <- g + ylab("ACC")  

plot(g)
ggplot2で描くボックスプロット