R 3行追加して複数のグラフをまとめてアニメーションにする

# 複数のグラフをまとめてアニメーションに

以下のような出力をGIFのアニメーションにしたいときがある

```r
# ライブラリの呼び出し
library(tidyverse)

# 描画　あえてforやsapplyを使っていません
10**1 %>% tibble(x=rnorm(n=., mean=0, sd=1), y=rnorm(n=., mean=0, sd=1)) %>% {ggplot(.) + geom_point(aes(x=x, y=y), color="red", alpha=0.5) + xlim(-6, 6) + ylim(-6, 6) + annotate("text", x=4, y=5, label="n=10")}

10**2 %>% tibble(x=rnorm(n=., mean=0, sd=1), y=rnorm(n=., mean=0, sd=1)) %>% {ggplot(.) + geom_point(aes(x=x, y=y), color="red", alpha=0.5) + xlim(-6, 6) + ylim(-6, 6) + annotate("text", x=4, y=5, label="n=100")}

10**3 %>% tibble(x=rnorm(n=., mean=0, sd=1), y=rnorm(n=., mean=0, sd=1)) %>% {ggplot(.) + geom_point(aes(x=x, y=y), color="red", alpha=0.5) + xlim(-6, 6) + ylim(-6, 6) + annotate("text", x=4, y=5, label="n=1000")}

10**4 %>% tibble(x=rnorm(n=., mean=0, sd=1), y=rnorm(n=., mean=0, sd=1)) %>% {ggplot(.) + geom_point(aes(x=x, y=y), color="red", alpha=0.5) + xlim(-6, 6) + ylim(-6, 6) + annotate("text", x=4, y=5, label="n=10000")}

```

|n = 10|n = 100|n = 1000|n = 10000|
|---|---|---|---|
|![p1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535720/7f7fc74f-ce46-8f5d-e8e7-3898a58cfb62.png)|![p2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535720/5f150b08-23a5-ad74-8bd5-8670a9eb344b.png)|![p3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535720/84635e79-21e3-fe2b-98e1-36cf7dadba32.png)|![p4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535720/ef1c36f7-fa82-437f-19fd-7c098fb8da74.png)|



# アニメーションにする方法

基本的には[Rで数学gif作って遊ぼう！magickパッケージで簡単にできるgif作成](https://note.com/statstudent/n/nb7b2367336b6)
さんで紹介されている方法を簡略化したもの

## magickライブラリをインストール
```r
install.packages("magick")
```

Linuxの場合には、別途OS側で「libmagick++-dev」をインストールする必要がある（あるいはImageMagick自体のインストールが必要かも）

```sh
sudo apt install libmagick++-dev
```

magickライブラリについてはこちらで詳しく紹介されている：
[The magick package: Advanced Image-Processing in R](https://cran.r-project.org/web/packages/magick/vignettes/intro.html#drawing_and_graphics)
[Rで解析：画像操作の進化「magick」パッケージ](https://www.karada-good.net/analyticsr/r-531)
[Rで画像処理～magick package](http://r-beginner.hatenadiary.jp/entry/2016/09/11/150248)


## 3行（4行）追加する
```r
# ライブラリの呼び出し
library(tidyverse)
library(magick) # 追加0：magickの呼び出し

#　追加1：デバイスの設定
img <- image_graph(width=360, height=360, res=100) # サイズと解像度の指定。単位はピクセル

# 描画
10**1 %>% tibble(x=rnorm(n=., mean=0, sd=1), y=rnorm(n=., mean=0, sd=1)) %>% {ggplot(.) + geom_point(aes(x=x, y=y), color="red", alpha=0.5) + xlim(-6, 6) + ylim(-6, 6) + annotate("text", x=4, y=5, label="n=10")}

10**2 %>% tibble(x=rnorm(n=., mean=0, sd=1), y=rnorm(n=., mean=0, sd=1)) %>% {ggplot(.) + geom_point(aes(x=x, y=y), color="red", alpha=0.5) + xlim(-6, 6) + ylim(-6, 6) + annotate("text", x=4, y=5, label="n=100")}

10**3 %>% tibble(x=rnorm(n=., mean=0, sd=1), y=rnorm(n=., mean=0, sd=1)) %>% {ggplot(.) + geom_point(aes(x=x, y=y), color="red", alpha=0.5) + xlim(-6, 6) + ylim(-6, 6) + annotate("text", x=4, y=5, label="n=1000")}

10**4 %>% tibble(x=rnorm(n=., mean=0, sd=1), y=rnorm(n=., mean=0, sd=1)) %>% {ggplot(.) + geom_point(aes(x=x, y=y), color="red", alpha=0.5) + xlim(-6, 6) + ylim(-6, 6) + annotate("text", x=4, y=5, label="n=10000")}

# 追加2：デバイスの終了
dev.off()

# 追加3：アニメーション化して出力
image_animate(img, fps=1, optimize=TRUE) %>% image_write("anime.gif") # fpsで速度の指定。100の約数のみ指定可能

```

![p_anime.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535720/ee7f51a8-fd23-39d1-aa23-e82ad8cd9a31.gif)

追加１から追加２までの間にデバイスに出力するコマンドを入れれば、簡単にアニメーションを作成できる。サイズや解像度は適宜調整する