我目前有一个带有scattermapbox地图的仪表板,它绘制了人们在网络中的移动情况,并使用几个回调来更新基于hoverdata等的图形。地图框图使用滑块(dcc.Slider)来调整当前的时间步长展示。我想添加一个“播放”按钮,可以自动点击滑块上不同时间步的点击过程。
我在Plotly中使用相同的数据集和参数创建了一个播放按钮,因为没有回调,滑块是图中布局字典中的一个元素。但是,我不确定在Dash中为按钮设置回调的位置,并且不确定它是否应该使用animate方法或者relayout方法。
目前我刚刚为每个时间步长创建了一个框架(与数据中包含的跟踪分开)。
当谈到推进滑块时,我还没有找到一个“好”/自然的方法来做到这一点。但是,我得到了一个使用Interval组件的解决方法。
import dash_core_components as dcc
import dash_html_components as html
import dash.dependencies
from dash.dependencies import Input, Output
app.layout = html.Div(children=[
dcc.Interval(id='auto-stepper',
interval=1*1000, # in milliseconds
n_intervals=0
),
dcc.Slider(
id = "steper",
min=1,
max=step_num,
value=1
)]
然后,我有一个回调:
@app.callback(
dash.dependencies.Output('steper', 'value'),
[dash.dependencies.Input('auto-stepper', 'n_intervals')])
def on_click(n_intervals):
if n_intervals is None:
return 0
else:
return (n_intervals+1)%step_num
最终的结果是每秒触发我的滑块回调,推进它。注意最后的模数可以阻止它走远。