Gifski converts image frames to high quality GIF animations. Either provide input png files, or automatically render animated graphics from the R graphics device.
gifski(
png_files,
gif_file = "animation.gif",
width = 800,
height = 600,
delay = 1,
loop = TRUE,
progress = TRUE
)
save_gif(
expr,
gif_file = "animation.gif",
width = 800,
height = 600,
delay = 1,
loop = TRUE,
progress = TRUE,
...
)vector of png files
output gif file
gif width in pixels
gif height in pixel
time to show each image in seconds
if the gif should be repeated. Set to FALSE to only play once, or a number to indicate how many times to repeat after the first.
print some verbose status output
an R expression that creates graphics
other graphical parameters passed to png
# Manually convert png files to gif
png_path <- file.path(tempdir(), "frame%03d.png")
png(png_path)
par(ask = FALSE)
for(i in 1:10)
plot(rnorm(i * 10), main = i)
dev.off()
#> agg_record_346871191
#> 2
png_files <- sprintf(png_path, 1:10)
gif_file <- tempfile(fileext = ".gif")
gifski(png_files, gif_file)
#> [1] "/tmp/RtmpBru46H/file3f9fb22abcc1a6.gif"
unlink(png_files)
utils::browseURL(gif_file)
# \donttest{
# Example borrowed from gganimate
library(gapminder)
library(ggplot2)
makeplot <- function(){
datalist <- split(gapminder, gapminder$year)
lapply(datalist, function(data){
p <- ggplot(data, aes(gdpPercap, lifeExp, size = pop, color = continent)) +
scale_size("population", limits = range(gapminder$pop)) + geom_point() + ylim(20, 90) +
scale_x_log10(limits = range(gapminder$gdpPercap)) + ggtitle(data$year) + theme_classic()
print(p)
})
}
# High Definition images:
gif_file <- file.path(tempdir(), 'gapminder.gif')
save_gif(makeplot(), gif_file, 1280, 720, res = 144)
#> [1] "/tmp/RtmpBru46H/gapminder.gif"
utils::browseURL(gif_file)# }