備忘ログ

チラシの裏的備忘録&メモ

Rの`{ggplot2}`で角の丸い棒グラフを描きたい

Rの{ggplot2}で角の丸い棒グラフを描きたいと思った。メモ。

真四角の棒グラフよりも少し角を落とした棒グラフにして、スライドに貼り付ける時に少し周りのテーマと揃えたいなと思った。

Github上に公開されている{ggchicklet}を使用すると角が丸い棒グラフを描くことができる。

インストールは次のようにする。

remotes::install_github("hrbrmstr/ggchicklet")

とりあえず適当なデータを作る。

df <- data.frame(value01 = LETTERS[1:3],
                 value02 = c(20, 25, 30))

これで{ggplot2}をつかって棒グラフを作ると次のようになる。

library(ggplot2)
ggplot(df, aes(x = value01, y = value02)) +
  geom_col()

普通の棒グラフができる。

角を丸くしたいなら、{ggchicklet}geom_chicklet()を使うとできる。

library(ggplot2)
library(ggchicklet)
ggplot(df, aes(x = value01, y = value02)) +
  geom_chicklet()

ほんの少しだけ角が落ちていい感じに丸くなる。

丸みはgeom_chicklet()内で、radiusで設定できる。

library(ggplot2)
library(ggchicklet)
ggplot(df, aes(x = value01, y = value02)) +
  geom_chicklet(radius = grid::unit(10, "mm"))

ただ、geom_col()的挙動なので、例えば、平均値を棒グラフにしようとすると平均値を求めてから処理する必要がある(そもそも箱ひげ図等のほうが妥当かもしれない)。

library(dplyr)
## 
##  次のパッケージを付け加えます: 'dplyr'

##  以下のオブジェクトは 'package:stats' からマスクされています:
## 
##     filter, lag

##  以下のオブジェクトは 'package:base' からマスクされています:
## 
##     intersect, setdiff, setequal, union
iris |> 
  group_by(Species) |> 
  summarise(Sepal.Length_mean = mean(Sepal.Length)) |> 
  ggplot(aes(x = Species, y = Sepal.Length_mean)) +
  geom_chicklet()