Использование gganimate и получение всевозможных ошибок - PullRequest
1 голос
/ 23 марта 2020

Я пытаюсь создать анимацию, используя gganimate:

library(ggplot2)
library(ggthemes)
library(gifski)
library(gganimate)

load("covid-19-es.Rda")
casos <- ggplot(data,aes(x=Fecha))+geom_point(aes(y=casos,color="Casos"))+geom_point(aes(y=salidas,color="Salidas"))+theme_tufte()+transition_states(Fecha,transition_length=2,state_length=1)+labs(title='Day: {frame_time}')
animate(casos, duration = 5, fps = 20, width =800, height = 600, renderer=gifski_renderer())
anim_save("casos.png")

Используется файл данных: здесь .

Первоначально Я использовал geom_lines вместо geom_point, но при этом возникла ошибка:

Error in seq.default(range[1], range[2], length.out = nframes) : 
  'from' must be a finite number

и

Error in transform_path(all_frames, next_state, ease, params$transition_length[i],  : 
  transformr is required to tween paths and lines

Либо он не любит линии, либо не любит их пары. Перешел на точку, и следовал советам в gganimate вопросов, чтобы создать файл. Однако это приводит к разным видам ошибок:

Error: Provided file does not exist

, которые я действительно не могу выяснить, поскольку я просто не предоставил никакого файла. Попытка сохранить в любом случае приводит к

Error: The animation object does not specify a save_animation method

Так что я действительно не знаю, делаю ли я что-то не так, использую устаревшую версию (или пакет) или что.

Используемые версии

  • R 3,6
  • ggplot 2_3.3.0
  • gganimate 1.0.5
  • gifski 0.8.6

1 Ответ

4 голосов
/ 23 марта 2020

Кажется, проблема в использовании {frame_time}.

Если вы звоните transition_states, используйте {closest_state} для отслеживания вашего состояния. В качестве альтернативы, позвоните transition_time и используйте {frame_time}.

Это работает для меня, используя transition_states и {closest_state}:

library(ggplot2)
library(gifski)
library(gganimate)

load("covid-19-es.Rda")

my_plot <- ggplot(data,aes(x = Fecha)) + 
    geom_point(aes( y =casos, color = "Casos")) +
    geom_point(aes(y = salidas, color = "Salidas")) +
    transition_states(Fecha, transition_length = 2, state_length = 1) +
    labs(title = 'Day: {closest_state}')

animate(
    plot = my_plot,
    render = gifski_renderer(),
    height = 600,
    width = 800, 
    duration = 5,
    fps = 20)

anim_save('my_gif.gif')

В качестве альтернативы (и это немного плавнее) :

my_plot <- ggplot(data,aes(x = Fecha)) + 
    geom_point(aes( y =casos, color = "Casos")) +
    geom_point(aes(y = salidas, color = "Salidas")) +
    transition_time(Fecha) +
    labs(title = 'Day: {frame_time}')
  • Я удалил вызов theme, потому что он не актуален
  • Я сохранил в формате gif вместо png
  • Пакет Я использую следующие версии:
> packageVersion('ggplot2')
[1] ‘3.3.0’
> packageVersion('gifski')
[1] ‘0.8.6’
> packageVersion('gganimate')
[1] ‘1.0.5’
  • Я использую R-3.6.3.

gif

...