web-dev-qa-db-fra.com

Contrôler la vitesse d'une gganimation

Je veux ralentir la vitesse de transition entre les états lorsque j'utilise library(gganimate).

Voici un mini exemple:

# devtools::install_github("thomasp85/gganimate")
library(gganimate) # v0.9.9.9999

dat_sim <- function(t_state, d_state) {
  data.frame(
    x = runif(1000, 0, 1),
    y = runif(1000, 0, 1),
    t_state = t_state*d_state
    )
}

dat <- purrr::map_df(1:100, ~ dat_sim(., 1))

ggplot(dat, aes(x, y)) +
  geom_hex(bins = 5) +
  theme_void() +
  lims(x = c(.3, .7),
       y = c(.3, .7)) +
  theme(legend.position = "none") +
  transition_time(t_state)

toofast

Mon comportement idéal serait beaucoup plus lent (10-100x), donc les changements de couleur évoluent progressivement et personne n'a de crise.

Si j'essaie d'utiliser transition_states() pour un contrôle plus manuel, j'obtiens un gif avec des cadres principalement vides. J'ai essayé différentes combinaisons pour transition_legnth= Et state_length= Sans effet notable.

ggplot(dat, aes(x, y)) +
  geom_hex(bins = 5) +
  theme_void() +
  lims(x = c(.3, .7),
       y = c(.3, .7)) +
  theme(legend.position = "none") +
  transition_states(t_state, transition_length = .1, state_length = 2)

mostlyblank

14
Nate

J'ai trouvé dans docsanimate fonction qui peut prendre fps et détails des paramètres.

@ param fps La fréquence d'images de l'animation en images/s

@ param détail Le nombre d'images supplémentaires à calculer, par image

Le résultat:

p <- ggplot(dat, aes(x, y)) +
      geom_hex(bins = 5) +
      theme_void() +
      lims(x = c(.3, .7),
           y = c(.3, .7)) +
      theme(legend.position = "none") +
      transition_time(t_state)
animate(p, fps=1)

enter image description here

Là aussi, vous pouvez spécifier un format de sortie tel que png, jpeg, svg.

18
RobJan