[[ggplot2]] の棒グラフ (`ggplot2::geom_col()`, `ggplot2::geom_bar()`) では、`fill` エステティック属性を使用して棒の色を変更できる。
デフォルトの色は `#595959`(グレー) で、固定値による一律の色変更とデータ値による条件付きの色変更の 2 つの方法がある。
```r
# 前処理
upc <- uspopchange |>
arrange(desc(Change)) |>
slice(1:15)
```
## 固定値による一律の色変更
すべての棒を同じ色で塗りつぶしたい場合は、`ggplot2::geom_col()` または `ggplot2::geom_bar()` の引数として `fill` を指定する。
```r
ggplot(upc, aes(x = Change, y = State)) +
geom_col(fill = "black")
```
![[ggplot2-bar-fill-fixed.png]]
`fill` には色名 [^1] や 16 進数カラーコード、RGB 値を指定できる。
```r
# 色名で指定
geom_col(fill = "black")
# 16進数カラーコードで指定
geom_col(fill = "#000000")
# RGB値で指定
geom_col(fill = rgb(0, 0, 0))
```
## データ値による条件付きの色変更
データの値に応じて棒の色を変更したい場合は、`ggplot2::aes()` 内で `fill` を指定する。
```r
ggplot(upc, aes(x = Change, y = State, fill = Region)) +
geom_col()
```
![[ggplot2-bar-fill-by-variable.png]]
デフォルトの色から変更したい場合は、以下のスケール関数から選択する
- `ggplot2::scale_fill_brewer()`: プリセットカラーパレット [^2] を使用
- `ggplot2::scale_fill_manual()`: 手動で色を指定
### `scale_fill_brewer()`: プリセットカラーパレットを使用する
```r
ggplot(upc, aes(x = Change, y = State, fill = Region)) +
geom_col() +
scale_fill_brewer(palette = "Set2")
```
![[ggplot2-bar-fill-brewer.png]]
### `scale_fill_manual()`: 手動で色を指定する
```r
ggplot(upc, aes(x = Change, y = State, fill = Region)) +
geom_col() +
scale_fill_manual(values = c("#669933", "#FFCC66"))
```
![[ggplot2-bar-fill-manual.png]]
## 関連ノート
- **[前提]** [[ggplot2 のエステティック属性は、aes() 内では変数を、外では定数を指定する]]: 本ノートの一律色変更と条件付き色変更の 2 通りはこの仕様に従う
- **[前提]** [[ggplot2 の棒グラフは用途に応じて geom_col() と geom_bar() を使い分ける]]: 本ノートの `fill` 指定はこれらの共通引数
- **[対比]** [[ggplot2 の棒グラフの枠線の色を変更する]]: 本ノートの内側 (`fill`) と対になる、棒の色指定 2 軸
[^1]: `grDevices::colors()` で色名一覧を取得できる
[^2]: `RColorBrewer::display.brewer.all()` でプリセットカラーパレットの一覧を取得できる