[[ggplot2]] で棒グラフを作成する際、`ggplot2::geom_bar()` と `ggplot2::geom_col()` の 2 つの関数が利用できる。両者は似た結果を生成するが、データの処理方法に根本的な違いがある。
## `geom_col()`: 既に集計済みの値を可視化する
`ggplot2::geom_col()` は、既に集計された値をそのまま棒の高さに設定する場合に使用する。データの前処理と可視化を明確に分離できるため、コードの意図が分かりやすくなる。
```r
# 可視化する前に、データを集計する
summarised_penguins <- penguins |>
group_by(species) |>
summarise(body_mass_mean = mean(body_mass, na = TRUE))
# 集計データを元に、geom_col()で可視化する
ggplot(summarised_penguins, aes(x = body_mass_mean, y = species)) +
geom_col()
```
![[ggplot2-geom-col-vs-geom-bar.png]]
## `geom_bar()`: 生データから統計量を計算して可視化する
`ggplot2::geom_bar()` は、生データから統計量を計算して可視化したい場合に使用する。一つの関数で集計と可視化を完結できるため、EDA(探索的データ分析) において効率的である。デフォルトの集計関数はカウント。
```r
# 集計と可視化を同時に行う
ggplot(penguins, aes(x = body_mass, y = species)) +
geom_bar(stat = "summary", fun = mean) +
xlab("body_mass_mean")
```
![[ggplot2-geom-col-vs-geom-bar.png]]
## 関連ノート
- **[前提]** [[ggplot2 は geom を組み合わせて可視化する]]: `geom_col()` / `geom_bar()` はこの geom の一種
- **[派生]** [[ggplot2 で棒グラフの間隔を調整する]]: `geom_col()` / `geom_bar()` の見た目を整える応用オプション