我将使用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中执行此操作,还是需要使用动画包?
答案 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.png
,gganim_plot0002.png
等的文件写入目录~/gganim
。如果要使用不同的文件名或不同的文件类型,请修改prefix
和device
的值。 (我将它们设置为默认值。)
答案 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
插入
产生的.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