NedFlanders
NedFlanders

Reputation: 33

Animating with ggplot and gganimate

I'm trying to learn about animating plots with gganimate, and I'm wondering if someone has a tip for the problems I'm running into. In an effort to make things simple, I'm doing this by creating a new project in RStudio Cloud, installing the ggplot2, gganimate, and datasauRus packages, and following this example from Isaac Faber:

library(datasauRus)
library(ggplot2)
library(gganimate)
ggplot(datasaurus_dozen, aes(x=x,y=y)) +
  geom_point() + 
  theme_minimal() + 
  transition_states(dataset,3,1) +
  ease_aes()

This creates a series of .PNG files but I cannot see an animation. Some seem to suggest that I can see it using the "print" function, but this does not work either.

I have also been unable to export this as a .GIF, although I have followed the advice given here. Specifically, the magick packages does not work for me (I get the same error about my images not being magick image objects), and when I try the following code:

p <- ggplot(datasaurus_dozen, aes(x=x,y=y)) +
  geom_point() + 
  theme_minimal() + 
  transition_states(dataset,3,1) +
  ease_aes()
anim <- animate(p)
anim_save("myfilename.gif",anim)

R tells me that The

animation object does not specify a save_animation method.

I've been unable to find examples or documentation that tells me how to specify a save_animation method. If anyone has advice on this topic, it would be greatly appreciated!

Upvotes: 1

Views: 2164

Answers (2)

Megatron
Megatron

Reputation: 17109

I solved this by specifying the gifski_renderer() in animate():

library(tidyverse)
library(gganimate)
library(gapminder)

g <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, colour = country)) +
  geom_point(alpha = 0.7, show.legend = FALSE) +
  scale_colour_manual(values = country_colors) +
  scale_size(range = c(2, 12)) +
  scale_x_log10() +
  facet_wrap(~continent) +
  # Here comes the gganimate specific bits
  labs(title = 'Year: {frame_time}', x = 'GDP per capita', y = 'life expectancy') +
  transition_time(year) +
  ease_aes('linear')

animate(g, height=400, width=600, renderer=gifski_renderer())

anim_save("gapminder.gif", g)

Note: this is the default renderer for animate(), but somehow needed to be specified explicitly. After doing it the first time, I no longer need to set it, a behavior I can't explain.

Upvotes: 0

matmar
matmar

Reputation: 348

you're doing one step too many:

library(datasauRus) 
library(ggplot2) 
library(gganimate)

p <- ggplot(datasaurus_dozen, aes(x=x,y=y)) +
geom_point() +
theme_minimal() +
transition_states(dataset,3,1) + 
ease_aes() 

anim_save("myfilename.gif",p)

enter image description here

Upvotes: 1

Related Questions