我可以在 Python Dash 中创建多个下拉菜单吗?
Can I create multiple dropdown menus in Python Dash?
我目前 运行 Python 中的下拉菜单一直运行良好。
'stat_option' 正在加载要使用的值列表,然后回调将值发送到用于 y 轴的数据帧。到目前为止,还不错..
dcc.Dropdown(
id='stats_dropdown',
options = stat_opt,
style = {
'width': '35%'
},
),
dcc.Graph(
id='graph',
),
...app.callback...
@app.callback(
dash.dependencies.Output('graph', 'figure'),
[dash.dependencies.Input('stats_dropdown', 'value')])
def update_graph(value):
datasets = df.to_json()
dff = px.line(df, x = 'time', y = value, color = 'host', line_group = 'host', hover_name = "host", title = 'stats').update_xaxes(categoryorder = "category ascending")
figure = dff
return(figure)
我想创建第二个下拉菜单,为 x 轴提供一个值。我创建了第二个下拉菜单,并引用 'date_opt' 变量中的唯一日期列表:
dcc.Dropdown(
id='date_dropdown',
options = date_opt,
style = {
'width': '35%',
},
),
但是当我为 date_dropdown 分配新的输入时:
@app.callback(
dash.dependencies.Output('graph', 'figure'),
[dash.dependencies.Input('date_dropdown', 'value')],
[dash.dependencies.Input('stats_dropdown', 'value')])
我收到以下错误:
dash.exceptions.IncorrectTypeException: The state argument `date_dropdown.value`
must be of type `dash.State`.
因为这复制了 stats_dropdown,我猜这个错误与处理多个输入有关?我一直在搜索 plotly 论坛和 Whosebug 线程,但在找到多个输入的答案方面并没有取得多大成功,我希望有 dash 经验的人可以阐明我的问题,以及哪里是个好地方会找到一些答案(一个例子也很好)。
Dash 回调采用三个参数(第三个是可选的)。第一个参数是dash.dependencies.Output的列表,第二个参数是dash.dependencies.Input的列表,第三个参数是dash.dependencies.State的列表。旁注:如果你只有一个输出,你可以传递它而无需将它放入列表中。但是,这不适用于输入或状态。
这意味着您在这里有两个选择,您可以将统计下拉列表作为状态 (1),这意味着它不会在更改时触发回调或作为输入,然后将其添加到输入列表 ( 2)(并且它会在更改时触发回调)。
(1)
@app.callback(
dash.dependencies.Output('graph', 'figure'),
[dash.dependencies.Input('date_dropdown', 'value')],
[dash.dependencies.State('stats_dropdown', 'value')])
(2)
@app.callback(
dash.dependencies.Output('graph', 'figure'),
[dash.dependencies.Input('date_dropdown', 'value'),
dash.dependencies.Input('stats_dropdown', 'value')])
您的错误是因为您将 dash.dependencies.Input 作为第三个参数传递,而它们只能作为第二个参数传递。
我目前 运行 Python 中的下拉菜单一直运行良好。
'stat_option' 正在加载要使用的值列表,然后回调将值发送到用于 y 轴的数据帧。到目前为止,还不错..
dcc.Dropdown(
id='stats_dropdown',
options = stat_opt,
style = {
'width': '35%'
},
),
dcc.Graph(
id='graph',
),
...app.callback...
@app.callback(
dash.dependencies.Output('graph', 'figure'),
[dash.dependencies.Input('stats_dropdown', 'value')])
def update_graph(value):
datasets = df.to_json()
dff = px.line(df, x = 'time', y = value, color = 'host', line_group = 'host', hover_name = "host", title = 'stats').update_xaxes(categoryorder = "category ascending")
figure = dff
return(figure)
我想创建第二个下拉菜单,为 x 轴提供一个值。我创建了第二个下拉菜单,并引用 'date_opt' 变量中的唯一日期列表:
dcc.Dropdown(
id='date_dropdown',
options = date_opt,
style = {
'width': '35%',
},
),
但是当我为 date_dropdown 分配新的输入时:
@app.callback(
dash.dependencies.Output('graph', 'figure'),
[dash.dependencies.Input('date_dropdown', 'value')],
[dash.dependencies.Input('stats_dropdown', 'value')])
我收到以下错误:
dash.exceptions.IncorrectTypeException: The state argument `date_dropdown.value`
must be of type `dash.State`.
因为这复制了 stats_dropdown,我猜这个错误与处理多个输入有关?我一直在搜索 plotly 论坛和 Whosebug 线程,但在找到多个输入的答案方面并没有取得多大成功,我希望有 dash 经验的人可以阐明我的问题,以及哪里是个好地方会找到一些答案(一个例子也很好)。
Dash 回调采用三个参数(第三个是可选的)。第一个参数是dash.dependencies.Output的列表,第二个参数是dash.dependencies.Input的列表,第三个参数是dash.dependencies.State的列表。旁注:如果你只有一个输出,你可以传递它而无需将它放入列表中。但是,这不适用于输入或状态。
这意味着您在这里有两个选择,您可以将统计下拉列表作为状态 (1),这意味着它不会在更改时触发回调或作为输入,然后将其添加到输入列表 ( 2)(并且它会在更改时触发回调)。
(1)
@app.callback(
dash.dependencies.Output('graph', 'figure'),
[dash.dependencies.Input('date_dropdown', 'value')],
[dash.dependencies.State('stats_dropdown', 'value')])
(2)
@app.callback(
dash.dependencies.Output('graph', 'figure'),
[dash.dependencies.Input('date_dropdown', 'value'),
dash.dependencies.Input('stats_dropdown', 'value')])
您的错误是因为您将 dash.dependencies.Input 作为第三个参数传递,而它们只能作为第二个参数传递。