gpt4 book ai didi

r - gganimate中有许多(> 50)状态的问题

转载 作者:行者123 更新时间:2023-12-04 13:56:36 24 4
gpt4 key购买 nike

我正在尝试使用gganimate为涵盖90年的数据集创建GIF,即我想让GIF贯穿90个州/年。但是,gganimate似乎只能处理少于50个状态。

所以这是一个例子:

library(tidyverse)
# devtools::install_github('thomasp85/gganimate')
library(gganimate)

df = expand.grid( x = 1,
y = c(2,3),
year = 1670:1760) %>% mutate( z = 0.03* year,
u = .2 * year)

这一切都可以正常工作49年:
ggplot(data=df %>% filter(., year %in% 1670:1719) , aes()) + 
geom_point( aes(x = x, y = y, fill = z, size = u), shape = 21 ) +
labs( title = 'Year: {closest_state}') +
enter_appear() +
transition_states(year, transition_length = 1, state_length = 2)

但是,当我包含50(或更多)年时,它变得很奇怪:
ggplot(data=df %>% filter(., year %in% 1670:1720) , aes()) + 
geom_point( aes(x = x, y = y, fill = z, size = u), shape = 21 ) +
labs( title = 'Year: {closest_state}') +
enter_appear() +
transition_states(year, transition_length = 1, state_length = 2)

我如何创建90年的GIF?任何想法都欢迎!
我对 gganimate还是陌生的,我使用 transition_states不正确吗?

最佳答案

这与gganmiate为动画使用固定数量的100帧有关。长达50年(请注意1670:1719的长度为50,而不是49),这没关系,但是如果要绘制更多的年份,则需要更多的帧。您可以通过显式调用animate()来控制帧数。

对于您的示例,这意味着您应该首先将绘图存储在变量中:

p <- ggplot(df) + 
geom_point(aes(x = x, y = y, fill = z, size = u), shape = 21) +
labs( title = 'Year: {closest_state}') +
enter_appear() +
transition_states(year, transition_length = 1, state_length = 2)

然后,您可以通过键入以下任意一个来开始动画
p
animate(p)
animate(p, nframes = 100)

这三行是等效的。第一个是您在示例中所做的:这将隐式调用 animate()渲染动画。第二行显式调用 animate(),第三行也将帧数显式设置为100。由于 nframes = 100是默认值,因此最后一行与其他行相同。

为了使动画有效,您需要设置更多的帧数。 100帧可以工作50年,因此在整个数据帧中,182帧应该可以工作91年。同样,以下两行相同:
animate(p, nframes = 182)
animate(p, nframes = 2 * length(unique(df$year)))

现在它可以工作了:

enter image description here

我不确定,为什么你需要的帧数是几年的两倍,但是在阅读了有关 transition_states()的文档中的以下声明后,

It then tweens between the defined states and pauses at each state.



我猜想,一帧用于两年之间的过渡,一帧用于表示给定年份的日期。

这意味着您实际上需要的帧数少于年数的两倍,因为上一年之后的过渡不需要任何帧。实际上, gganimate()nframes = 100nframes = 182输出分别为:
Frame 99 (100%)
Finalizing encoding... done!

Frame 181 (100%)
Finalizing encoding... done!

因此,如果我的猜测是正确的,那么的确是在准确地创建预期的帧数。

关于r - gganimate中有许多(> 50)状态的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52332967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com