有没有其他方法来实现情节R的累积动画?

时间:2018-04-17 06:46:33

标签: r animation plotly r-plotly

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/

有没有办法创建除示例之外的累积动画? 救救我!

1 个答案:

答案 0 :(得分:1)

我目前正面临着同样的问题。 here中描述的方法不适用于数千行数据。

我没有一个完整的解决方案,但是我的想法是根据滑块值调整x轴范围,而不是在每一帧重复使用数据(请参见示例图) p_range_slider)。不幸的是,这没有为我们提供“播放”按钮。

我认为可能以类似的方式使用animation_slider(),但是传递给steps的{​​{1}}参数没有被评估(请参见示例图animation_slider())。这些步骤与动画帧保持联系(如p_animation_slider中所述)。

更新:此行为是设计使然,请参见sources

?animation_slider

同时建立共享两个x轴的 # don't let the user override steps slider$steps <- steps 也不成功。

subplot

似乎要使此方法有效,library(plotly) DF <- data.frame( n = 1:50, x = seq(0, 12, length = 50), y = runif(n = 50, min = 0, max = 10) ) steps <- list() for (i in seq_len(nrow(DF))) { steps[[i]] <- list( args = list("xaxis", list(range = c(0, i))), label = i, method = "relayout", value = i ) } # Custom range slider ----------------------------------------------------- p_range_slider <- plot_ly( DF, x = ~ x, y = ~ y, type = "scatter", mode = "markers" ) %>% layout(title = "Custom range slider", xaxis = list(range = steps[[1]]$args[[2]]$range), sliders = list( list( active = 0, currentvalue = list(prefix = "X-max: "), pad = list(t = 20), steps = steps))) p_range_slider # Animation slider -------------------------------------------------------- p_animation_slider <- plot_ly( DF, x = ~ x, y = ~ y, type = "scatter", mode = "markers", frame = ~ n ) %>% layout(title = "Animation slider") %>% animation_slider( active = 6, currentvalue = list(prefix = "X-max: "), pad = list(t = 20), steps = steps # custom steps are ignored ) p_animation_slider # subplot(p_range_slider, p_animation_slider, nrows = 2, margin = 0.05, shareX = TRUE) 需要允许它的animation_slider()参数执行自定义操作(与定义的框架相同)。高度赞赏任何其他解决此问题的想法。

也许可以使用R中的过滤器(避免轴重缩放)为python api复制this方法吗? -Filter in R


其他信息:

animation_slider documentation

JS滑块attributes

相关GitHub issue

RStudio社区question

在密谋论坛上,这是同一人question