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/
有没有办法创建除示例之外的累积动画? 救救我!
答案 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。