我想对一组帧进行动画处理,其中每个帧可能具有不同数量的轨迹,如[此处]所述1 https://community.plotly.com/t/animating-a-variable-number-of-traces-in-each-frame/46400。我将使用以下数据框和库:
library(plotly)
df <- data.frame(x = (1:200), a = runif(200), b = runif(200)+1, c = runif(200)-1)
如果每帧的迹线数量并不总是相同,则仅显示第一帧的迹线数量。在屏幕截图中,显示了第二帧,其中跟踪b
不见了。同样,在第 3 帧中,跟踪b
and c
缺失。
p <- plot_ly(mode = "lines+markers", type ="scatter")
# frame 1 traces
p <- add_trace(p, x = df$x[1:100], y = df$a[1:100], frame = 1, name = "a frame 1")
# frame 2 traces
p <- add_trace(p, x = df$x[1:100], y = df$a[1:100]+1, frame = 2, name = "a frame 2")
p <- add_trace(p, x = df$x[1:150], y = df$b[1:150]+1, frame = 2, name = "b frame 2")
# frame 3 traces
p <- add_trace(p, x = df$x[1:100], y = df$b[1:100]-1, frame = 3, name = "a frame 3")
p <- add_trace(p, x = df$x[1:150], y = df$b[1:150]-2, frame = 3, name = "b frame 3")
p <- add_trace(p, x = df$x[1:200], y = df$c[1:200]-2, frame = 3, name = "c frame 3")
# add layout
p <- layout(p,
title = "Example not showing traces",
yaxis = list(title = "y dim"),
xaxis = list(title = "x dim"))
# and show the plot
p
我发现避免这种情况的黑客方法是将虚拟痕迹添加到痕迹较少的帧中。这确保了每帧的迹线数量始终相同。通过添加visibile = F
,不显示虚拟迹线,但显示正确的迹线数量。需要虚拟跟踪是一个错误还是我做错了什么?
p <- plot_ly(mode = "lines+markers", type ="scatter")
# frame 1 traces
p <- add_trace(p, x = df$x[1:100], y = df$a[1:100], frame = 1, name = "a frame 1", visible = T)
p <- add_trace(p, x = df$x[1:150], y = df$b[1:150], frame = 1, name = "dummy frame 1", visible = F)
p <- add_trace(p, x = df$x[1:200], y = df$c[1:200], frame = 1, name = "dummy frame 2", visible = F)
# frame 2 traces
p <- add_trace(p, x = df$x[1:100], y = df$a[1:100]+1, frame = 2, name = "a frame 2", visible = T)
p <- add_trace(p, x = df$x[1:150], y = df$b[1:150]+1, frame = 2, name = "b frame 2", visible = T)
p <- add_trace(p, x = df$x[1:200], y = df$c[1:200]+1, frame = 2, name = "dummy frame 1", visible = F)
# frame 3 traces
p <- add_trace(p, x = df$x[1:100], y = df$b[1:100]-1, frame = 3, name = "a frame 3", visible = T)
p <- add_trace(p, x = df$x[1:150], y = df$b[1:150]-2, frame = 3, name = "b frame 3", visible = T)
p <- add_trace(p, x = df$x[1:200], y = df$c[1:200]-2, frame = 3, name = "c frame 3", visible = T)
# add layout
p <- layout(p,
title = "Example using 'visible' attribute hack",
yaxis = list(title = "y dim"),
xaxis = list(title = "x dim"))
# add animation options
p <- animation_opts(p, 1000, easing = "elastic", redraw = TRUE)
# and show plot
p
当迹线数量变化时,是否有更好的方法来显示不同的帧?