作成済みの画像ファイルを連結してGIFアニメーションを作成する方法を紹介します。
始めにサンプルとする画像ファイルを10枚作成します。作成しました画像ファイルは D:/gif-anime に保存します。
set.seed(20240618)
library(ggplot2)
library(dplyr)
<- 10
n <- seq(n) %>% as.factor()
x <- rnorm(n)
y0 <- scales::hue_pal()(n)
barcol for (iii in seq(n)) {
<- y0
y setdiff(seq(n), seq(iii))] <- 0
y[<- ggplot(mapping = aes(x = x, y = y, fill = x)) +
g geom_bar(stat = "identity") +
ylim(range(y0)) +
geom_hline(yintercept = 0) +
labs(title = paste0("x = ", iii)) +
scale_fill_manual(values = barcol) +
theme(legend.position = "none")
print(g)
ggsave(filename = paste0(formatC(x = iii, width = 2, flag = "0"), ".png"), plot = g, path = "D:/gif-anime")
}
保存された画像ファイル名を確認します。
<- list.files(path = "D:/gif-anime", pattern = "*.png", full.names = TRUE)
imagefiles %>% matrix() imagefiles
[,1]
[1,] "D:/gif-anime/01.png"
[2,] "D:/gif-anime/02.png"
[3,] "D:/gif-anime/03.png"
[4,] "D:/gif-anime/04.png"
[5,] "D:/gif-anime/05.png"
[6,] "D:/gif-anime/06.png"
[7,] "D:/gif-anime/07.png"
[8,] "D:/gif-anime/08.png"
[9,] "D:/gif-anime/09.png"
[10,] "D:/gif-anime/10.png"
パッケージ magick を利用し上記10枚の画像ファイルを連結してGIFアニメーションを作成します。
参照しました資料はこちらです。 https://stackoverflow.com/questions/56389470/convert-multiple-png-to-gif-as-an-animation-in-r
パッケージのバージョンを確認します。
packageVersion("magick")
[1] '2.8.1'
GIFアニメーションを作成します。
%>%
imagefiles ::image_read() %>% # 画像ファイルすべての読み込み
magick::image_join() %>% # 画像ファイルの結合
magick::image_animate(fps = 2) # アニメーションのための設定 magick
GIFアニメーションを保存する場合は image_write {magick} を利用します.
%>%
imagefiles ::image_read() %>%
magick::image_join() %>%
magick::image_animate(fps = 2) %>%
magick::image_write(path = "D:/gif-anime/animation-by-magick.gif")
magicklist.files(path = "D:/gif-anime", pattern = "*.gif", full.names = TRUE)
[1] "D:/gif-anime/animation-by-magick.gif"
以上です。