tidyplotsを試す

最近R界隈で話題なのが[tidyplots](https://github.com/jbengler/tidyplots)。

基本的には[ggplot2](https://ggplot2.tidyverse.org/)のラッパーなのだけど、素のggplot2よりもシンプルで書きやすいという噂です。

学生さん向けの[解説記事](https://lfbphysiol.wordpress.com/2024/11/19/tidyplots/)や、yutaniさんによる[レビュー動画](https://www.youtube.com/live/hJk1NATJgd0?si=HK1SJlp-JW2aYQJo)も出ています。
* * *
ここでは公式サイトのusageに載っている事例からいくつかをggplot2とtidyplotsとで書き比べてみたいと思います。
なお、デフォルト状態での表現を確認するため、両者を似せるための調整はしません。

まず必要なパッケージを読み込みます。
```r
library(conflicted)
library(tidyverse)
library(tidyplots)
```
***
1つ目は平均の棒グラフにエラーバーとドットを載せた図です。
```r:tidyplots
study %>% 
  tidyplot(x = treatment, y = score, color = treatment) %>% 
  add_mean_bar(alpha = 0.4) %>% 
  add_sem_errorbar() %>% 
  add_data_points_beeswarm()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220806/a9fcdf4d-fc1c-410e-edb9-9e25717e3270.png)

```r:ggplot2
study |>
  ggplot(aes(x = treatment, y = score, fill = treatment)) +
  stat_summary(geom = "bar", fun = "mean") +
  stat_summary(geom = "errorbar", fun.data = "mean_se", width = 0.5) +
  geom_dotplot(binaxis = "y", stackdir = "center", binwidth = 1)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220806/e9faab48-d526-a5c5-4885-42f481383adf.png)

***
2つ目は積み上げ棒グラフ
```r:tidyplots
energy %>% 
  tidyplot(x = year, y = power, color = energy_source) %>% 
  add_barstack_absolute()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220806/ba2cc164-74b7-9cf9-4f70-3d73ae76256a.png)

```r:ggplot2
energy %>% 
  ggplot(aes(x = year, y = power, fill = energy_source )) +
  geom_col()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220806/7848a9d7-2442-9ce3-bece-6da609083615.png)
***
3つ目は積み上げ帯グラフ。

```r:tidyplots
energy_week %>% 
  tidyplot(x = date, y = power, color = energy_source) %>% 
  add_areastack_absolute()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220806/5cf2b62b-f751-deab-42a5-a3b695745a8a.png)

```r:ggplot2
energy_week %>% 
  ggplot(aes(x = date, y = power, fill = energy_source)) +
  geom_area(color = "gray")
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220806/358c08c3-82e1-981b-fb21-11c6d7f654cb.png)

***
4つ目は割合を示した積み上げ棒グラフ。

```r:tidyolots
energy_week %>% 
  tidyplot(x = date, y = power, color = energy_source) %>% 
  add_areastack_relative()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220806/96996f0c-ac9c-3fa3-7268-a5961ebd2b22.png)

```r:ggplots
energy_week %>% 
  ggplot(aes(x = date, y = power, fill = energy_source)) +
  geom_area(position = "fill", color = "gray")
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220806/e739b1d1-f249-8c62-23b8-84c7dc2571c6.png)
***
5つ目は折れ線グラフ

```r:tidyplots
time_course %>%
  tidyplot(x = day, y = score, color = treatment, dodge_width = 0) %>%
  add_mean_line() %>%
  add_mean_dot() %>%
  add_sem_ribbon()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220806/c32e486c-777a-bea8-bff2-b264c2538cff.png)

```r:ggplot2
time_course %>%
  ggplot(aes(x = day, y = score, color = treatment,fill = treatment, group = treatment)) +
  stat_summary(geom = "line", fun = "mean") +
  stat_summary(geom = "ribbon", fun.data = "mean_se", alpha = 0.5) +
  stat_summary(geom = "point", fun = "mean")
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220806/b177238d-6882-1df7-5989-2c100af1e8f2.png)
***
6つ目はヒートマップ。

```r:tidyplots
climate %>%
  tidyplot(x = month, y = year, color = max_temperature) %>%
  add_heatmap()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220806/8f0bbd49-f94a-7727-d119-1b628c7a0ef2.png)

```r:ggplot2
climate |>
  ggplot(aes(x = month, y = year, fill = max_temperature)) + 
  geom_tile()
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220806/9d79aca4-a4ae-3452-76f9-eaa4faff1919.png)

***
7つ目は箱ひげ図とp値。
```r:tidyplots
study %>% 
  tidyplot(x = treatment, y = score, color = treatment) %>% 
  add_boxplot() %>% 
  add_test_pvalue(ref.group = 1)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220806/52e051a9-b3c4-eeb9-3bf1-0a790ee7801d.png)

```r:ggplot2
library(ggsignif)
study %>% 
  ggplot(aes(x = treatment, y = score, fill =treatment)) +
  geom_boxplot() +
  geom_signif(comparisons = list(c("A", "B")), test = "t.test", map_signif_level = FALSE, y_position = 55) +
  geom_signif(comparisons = list(c("A", "C")), test = "t.test", map_signif_level = FALSE, y_position = 60) +
  geom_signif(comparisons = list(c("A", "D")), test = "t.test", map_signif_level = FALSE, y_position = 65) 
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/220806/3a0ce0ce-b032-5f6b-8338-ab907664ebe3.png)
***

はい、どうでしょうかね。

tidyplotsの方が特別短く書けるわけじゃないようです。
しかし、コードを短くすることはtidyplotsの目的ではないんでしょう。
それよりも、生のデータから細かい調整なしに見やすく整ったグラフを出してくれるのは大きなメリットだと思いました。

カラーパレットが視覚多様性に配慮されているのも嬉しいところです。

tidyplotsはggplot2から置き換えられるようなものではないですが、用途によってはggplotsで試行錯誤するよりも、tidyplotsのデフォルトの方が効率的ということもあるかもしれません。

Enjoy!