如何使用 python 通过 Plot.ly 仪表板将 "play" 按钮合并到 Dash 中?
How to incorporate a "play" button into a Dash by Plot.ly dashboard using python?
我目前有一个带有 scattermapbox 地图的仪表板,它绘制了网络中人员的移动,并使用多个回调来根据 hoverdata 等更新图形。mapbox 图形使用滑块 (dcc.Slider)调整当前显示的时间步长。我想添加一个 "play" 按钮来自动完成点击滑块上不同时间步长的过程。
我成功地使用相同的数据集和参数在 Plotly 中创建了一个播放按钮,因为没有回调并且滑块是图形布局字典中的一个元素。但是,我不确定在 Dash 中将按钮的回调放在哪里,也不确定它应该使用 animate 方法还是 relayout 方法。
目前我刚刚为每个时间步创建了一个帧(与数据中包含的轨迹分开)。
谈到推进滑块时,我还没有找到 "good"/自然的方法来做到这一点。但是,我得到了一个 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
这样做的最终结果是每秒触发对我的滑块的回调,并推进它。注意最后的模数以阻止它走得太远。
我目前有一个带有 scattermapbox 地图的仪表板,它绘制了网络中人员的移动,并使用多个回调来根据 hoverdata 等更新图形。mapbox 图形使用滑块 (dcc.Slider)调整当前显示的时间步长。我想添加一个 "play" 按钮来自动完成点击滑块上不同时间步长的过程。
我成功地使用相同的数据集和参数在 Plotly 中创建了一个播放按钮,因为没有回调并且滑块是图形布局字典中的一个元素。但是,我不确定在 Dash 中将按钮的回调放在哪里,也不确定它应该使用 animate 方法还是 relayout 方法。
目前我刚刚为每个时间步创建了一个帧(与数据中包含的轨迹分开)。
谈到推进滑块时,我还没有找到 "good"/自然的方法来做到这一点。但是,我得到了一个 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
这样做的最终结果是每秒触发对我的滑块的回调,并推进它。注意最后的模数以阻止它走得太远。