棒グラフ

棒グラフは、種別、地域別などのカテゴリーで分けられるデータの特徴を示すグラフである。R では barplot 関数を利用して描く。

  1. 基本的な描き方
  2. 誤差範囲(エラーバー)の付け方
  3. 複数の棒グラフ(積み上げや横並びなど)
  4. 2 項目データの横並び棒グラフ

棒グラフ

行列型のデータに対して、棒グラフを描く例。サンプルデータは、イネの伸長を測定したものである。5 つの実験群からなり、S2 群と S3 群は欠損値を 1 つずつ含む。

# データをCSVファイルから取り込む
data <- read.table("http://stat.biopapyrus.net/data/tseed.csv", header = TRUE, sep = ",")

barplot で棒グラフを描く例。棒グラフの高さは、各群の平均値である。

# 各群の平均値を求める
group.mean <- apply(data, 2, mean, na.rm = T)

# オプション指定なしで棒グラフを描く例(左の図)
barplot(group.mean)

# オプションを調整する(右の図)
barplot(
  group.mean,
  las = 3,       # x軸の項目を縦にする
  col = c("gray", "yellow", "orange", "orangered", "darkred"),     # 各群に異なる色を付ける
)
棒グラフの描き方

その他のオプション調整の例。

# 各群の平均値を求める。
group.mean <- apply(data, 2, mean, na.rm = T)

# 棒グラフに名前を付ける(名前の変更)
barplot(group.mean, names.arg = c("A", "B", "C", "D", "E"))

# 棒グラフを水平配置する
barplot(group.mean, horiz = T)
棒グラフの描き方

誤差範囲(エラーバー)の付け方

棒グラフに誤差範囲(エラーバー)を付けることができる。barplot を利用して棒グラフを描くと、その戻り値として各棒の高さ(座標情報)を取得できる。この座法情報を利用してエラーバーを追加する。

xMean <- apply(data, 2, mean, na.rm = T)       #グラフの高さ
xSd <- apply(data, 2, sd, na.rm = T)           #誤差範囲

# 棒グラフを描きます。それから、その座標情報を変数 B に保存する
B <- barplot(xMean, ylab = "Length(mm)", xlab = "Group", ylim = c(0, 6))

#誤差バーを描く、lengthは誤差バーのバーの長さを示す、angleを鋭角にするとバーは矢印状となる
arrows(B, xMean - xSd, B, xMean + xSd, angle = 90, length = 0.1)
arrows(B, xMean + xSd, B, xMean - xSd, angle = 90, length = 0.1)

積み上げ棒グラフ

積み上げグラフの描き例。

data <- cbind(
  A = c(1.0, 1.0, 1.2, 1.1),
  B = c(1.7, 1.5, 1.5, 1.8),
  C = c(2.0, 2.1, 2.2, 2.6),
  D = c(2.7, 3.1, 3.2, 3.1),
  E = c(4.2, 4.0, 4.6, 3.6)
)

# 凡例を用意
labels <- c("M. mus", "H. sapiens", "A. thaliana", "T. platycarpum")

barplot(
  data,                                                 # 行列型データ
  col=heat.colors(nrow(data)),                          # 色の指定
  legend.text = labels,                                 # 棒グラフに凡例を付ける
  args.legend = list(x = 2, y = max(colSums(data)))     # 凡例の位置を調整
)
積み上げ棒グラフの例
barplot(
  sweep(data, 2, 100 / colSums(data), "*"),         # データを割合に変換する
  col=terrain.colors(nrow(data)),                   # 色の指定
  legend.text = labels,                             # 棒グラフに凡例を付ける
  args.legend = list(x = ncol(data) + 4, y = 100),  # 凡例の位置を調整する
  xlim = c(0, ncol(data)+4)                         # 凡例を描く位置を確保
)
積み上げ棒グラフを描く例
barplot(
  data,                                         # 行列型データ
  col=topo.colors(nrow(data)),                  # 色の指定
  legend.text = labels,                         # 棒グラフに凡例を付ける
  args.legend = list(x = 10, y = max(data)),    # 凡例の位置を調整する
  beside = TRUE
)
積み上げ棒グラフを描く方法です。

2 項目データの横並び棒グラフ

2 項目(カテゴリ)のデータを横並びの棒グラフでプロットする例。

# サンプルデータ
data <- data.frame(
          A = c(38, 154, 202, 178, 66),
          B = c(52, 226, 300, 370, 95)
        )
rownames(data) <- c("Sep", "Oct", "Nov", "Dec", "Jan")

barplot(t(data), col = c("#333333", "#eeeeee"), beside = TRUE)
legend("topleft", legend = c("cate. A", "cate. B"),
       bg = "transparent", fill = c("#333333", "#eeeeee"))
積み上げ棒グラフを描く方法です。

棒グラフの縦軸を対数スケールにする例。

# サンプルデータ
data <- data.frame(
          A = c(0.02, 154, 202, 1078, 3406),
          B = c(10, 246, 3000, 6070, 10095)
        )
rownames(data) <- c("Sep", "Oct", "Nov", "Dec", "Jan")

barplot(t(data), col = c("#333333", "#eeeeee"), beside = TRUE, log = "y")
legend("topleft", legend = c("cate. A", "cate. B"),
       bg = "transparent", fill = c("#333333", "#eeeeee"))
積み上げ棒グラフを描く方法です。

ggplot2

次は ggplot2 で描いた棒グラフの例である。(詳細

ggplotで描いた棒グラフ。