如何保存使用gganimate包创建的gif帧

时间:2018-03-07 15:03:31

标签: r gganimate

我将使用gapminder数据作为示例。让我们说我创建这个动画:

library(gapminder)
library(ggplot2)
theme_set(theme_bw())
p <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, color = 
continent, frame = year)) +
  geom_point() +
  scale_x_log10()

library(gganimate)

gganimate(p)

gganimate(p, "output.gif")

现在,我希望能够访问构成gif的各个图像(帧)。有没有办法在gganimate中执行此操作,还是需要使用动画包?

2 个答案:

答案 0 :(得分:4)

自问这个问题以来,

gganimate发生了很大变化。在当前版本(0.9.9.9999)中,有一种方法可以将每个帧存储为自己的文件。

首先,我需要创建动画,该动画与该软件包的新版本看起来有点不同:

p <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, color = continent)) +
      geom_point() +
      scale_x_log10() +
      transition_states(year, 1, 5)

然后可以使用来显示动画

animate(p)

渲染由所谓的渲染器负责。要将动画存储在单个动画gif中,可以使用

animate(p, nframes = 24, renderer = gifski_renderer("gganim.gif"))

请注意,我已经手动设置了要创建的帧数。默认情况下,使用100帧,我在这里选择了较小的数字。有时,选择正确的帧数可能会有些棘手,如果您得到奇怪的结果,请尝试使用更多的帧。

或者,您可以使用file_renderer()将每个帧写入其自己的文件

animate(p, nframes = 24, device = "png",
        renderer = file_renderer("~/gganim", prefix = "gganim_plot", overwrite = TRUE))

这会将名为gganim_plot0001.pnggganim_plot0002.png等的文件写入目录~/gganim。如果要使用不同的文件名或不同的文件类型,请修改prefixdevice的值。 (我将它们设置为默认值。)

答案 1 :(得分:0)

@Stibu的回答确实很好。这里有一些额外的提示:

获得更流畅的动画

  • nframes设置为动画中单个图的数量的倍数。例如,如果动画中有52个图(一年中的每个星期一次),请尝试设置nframes = (4 * 52)nframes = (6 * 52)等。

  • 尝试添加enter_grow()exit_fade()(如果没有的话,可以将它们添加到许多动画中)

myanimation + 
  enter_grow() +
  exit_fade()

加速/减速

  • 如果您选择较高的nframe,则动画可能会变慢。您可以通过设置适当的duration,例如,更改动画的速度
animate(myanimation, 
  nframes = 312, 
  renderer = gifski_renderer("new_users_weekly.gif"), 
  duration = 14) # Duration in seconds

在RMarkdown(或其他网页)中使用保存的gif

插入

产生的.gif
animate(myanimation, renderer = gifski_renderer("new_users_weekly.gif")

只需简单地完成以下操作即可进入网页或RMarkdown:

<img src="new_users_weekly.gif" alt="animation"/>

更多信息

https://cran.r-project.org/web/packages/gganimate/gganimate.pdf#page=4