链式回调

使用 Dash 和 Plotly 构建仪表板

Alex Scriven

Data Scientist

为何链式回调?

 

  • 目前回调可用于:
    • 重新生成图表
    • 更改 HTML/文本

$$

  • 那么回调触发回调呢?
    • 用例:条件下拉框
使用 Dash 和 Plotly 构建仪表板

常见示例

 

两个并排下拉框的动图。第一个占位符为 Make,第二个为 Model。选择第一个下拉框中的 Audi 后,第二个下拉框的可选项被过滤为仅 Audi 车型。

使用 Dash 和 Plotly 构建仪表板

输入与输出

  • 关键:理清回调路径(输入与输出)
  • 有用工具:输入-输出示意图

$$

  • 流程:
    • 用户更改第一个下拉框的 value(输入)
    • 一个回调子集化数据并返回第二个下拉框的 options(输出)
    • 第二个回调可由第二个下拉框的 value 属性(输入)触发。

一个带矩形和箭头的纵向流程图。框间有小文本框。第一个框为 user,箭头指向"Major Category 下拉框",中间小框写着 value。再向下连到"Minor category 下拉框",中间小框为 Options。此框再连到最后的"(可选)更多回调",中间小框为 Options。

使用 Dash 和 Plotly 构建仪表板

Dash 中的链式回调

 

@callback(
  Output('minor_cat_dd', 'options'),
  Input('major_cat_dd', 'value'))

def update_major_cat(major_cat_dd): # Filter options (list of dicts) return minor_options

 

@callback(
  Output('minor_cat_dd', 'value'),
  Input('minor_cat_dd', 'options'))

def update_minor_cat(minor_cat_options): # Pick a default value return chosen_value
使用 Dash 和 Plotly 构建仪表板

多个输出

  • 同时更新多个元素

$$

@callback(
  Output('my_title', 'children'),
  Output('minor_cat_dd', 'value'),
  Input('minor_cat_dd', 'options')
)
def some_function(input):
  # function body
  return title_value, dropdown_value
使用 Dash 和 Plotly 构建仪表板

多个输出示意图

一个扩展的流程图。最后一格不再是"(可选)更多回调",而是有两条箭头指向并排的两个框,分别为"次级类别下拉框"和"HTML 标题",它们又各自指向上次图中底部的可选框。

使用 Dash 和 Plotly 构建仪表板

让我们练习!

使用 Dash 和 Plotly 构建仪表板

Preparing Video For Download...