accumulate_by <- function(dat, var) {
var <- lazyeval::f_eval(var, dat)
lvls <- plotly:::getLevels(var)
dats <- lapply(seq_along(lvls), function(x) {
cbind(dat[var %in% lvls[seq(1, x)], ], frame = lvls[[x]])
})
dplyr::bind_rows(dats)
}
d <- txhousing %>%
filter(year > 2005, city %in% c("Abilene", "Bay Area")) %>%
accumulate_by(~date)
如果以上述函数的方式实现累积动画,则行数将增加过多。
我用的是一千帧,一万行,因为数据量大,已经打乱了正在进行的工作。
https://plot.ly/r/cumulative-animations/
除了这个例子,还有什么方法可以创建一个累积动画吗?帮帮我!
2条答案
按热度按时间fv2wmkja1#
我现在面临着同样的问题,here描述的方法不适用于几千行数据。
我没有一个完全有效的解决方案,但我的想法是根据滑块值调整x轴范围,而不是重复使用每帧的数据(参见示例图
p_range_slider
)。不幸的是,这没有为我们提供“播放”按钮。我认为可以以类似的方式使用
animation_slider()
,但是传递给animation_slider()
的steps
参数没有求值(参见示例图p_animation_slider
)。步骤仍然与动画帧绑定(如?animation_slider
中所述)。更新:此行为是 * 设计预期 * 参见sources:
此外,构建两个共享x轴的
subplot
也不成功。看起来
animation_slider()
需要允许它的steps
参数来执行自定义操作(从定义的框架中解除绑定)。也许可以在R?-Filter in R中使用过滤器(避免轴重缩放)为python API重现this方法
下面是一个关于如何在R中使用过滤器变换和自定义范围滑块的示例,但是仍然没有动画(没有预先计算每帧):
其他信息:
动画_滑块documentation
JS滑块attributes
相关的GitHub issue
RStudio社区question
这是plotly论坛上的相同的question。
lf5gs5x22#
我们遇到了类似的问题,每分钟有数千个数据点,所以作为第一步,我创建了另一个列“time_chunk”,它将时间四舍五入到分钟。
然后我用time_chunks来代替非常精确的分钟数据(带小数位),这样我得到了更合理的块数。
动画不是完全平滑的,但我们的数据大约是20-40分钟长,所以它是合理的,处理速度快。
所以,理论上说: