我在添加破折号时遇到了多个问题。
# build dash layout
app.layout = html.Div([
# section title
dbc.Row(dbc.Col(html.H4('Scatter Plot'),
width={'offset': 0, 'size': 'auto'})),
# first row contains 2 dropdowns
dbc.Row(
[
dbc.Col(dcc.Dropdown(id='1st_scatter_dropdown', placeholder='Select an activity',
options=[{'label': k, 'value': k} for k in dp_1.keys()],
clearable=False,
multi=False,
value='Mining'),
width={'size': 2, 'offset': 0}
),
dbc.Col(dcc.Dropdown(id='2nd_scatter_dropdown', placeholder='Select a metric',
clearable=False,
multi=False,
),
width={'size': 2, 'offset': 0}
)
]
),
# second row contains 2 dropdowns
dbc.Row(
[
dbc.Col(dcc.Dropdown(id='3rd_scatter_dropdown', placeholder='Select X variable',
clearable=False,
multi=False,
),
width={'size': 2, 'offset': 0}
),
dbc.Col(dcc.Dropdown(id='4th_scatter_dropdown', placeholder='Select Y variable',
clearable=False,
multi=False,
),
width={'size': 2, 'offset': 0}
),
]
)
])
# callback for the 2nd scatter dropdown - options
@app.callback(
dash.dependencies.Output('2nd_scatter_dropdown', 'options'),
[dash.dependencies.Input('1st_scatter_dropdown', 'value')])
def set_2nd_scatter_dropdown_options(selected_activity):
return [{'label': i, 'value': i} for i in dp_1[selected_activity]]
# callback for the 2nd scatter dropdown - value
@app.callback(
dash.dependencies.Output('2nd_scatter_dropdown', 'value'),
[dash.dependencies.Input('2nd_scatter_dropdown', 'options')])
def set_2nd_scatter_dropdown_value(available_activity):
return available_activity[0]['value']
# callback for the third scatter dropdown - options
@app.callback(
dash.dependencies.Output('3rd_scatter_dropdown', 'options'),
[dash.dependencies.Input('1st_scatter_dropdown', 'value'),
dash.dependencies.Input('2nd_scatter_dropdown', 'value')])
def set_3rd_scatter_dropdown_options(selected_activity, selected_metric):
return [{'label': i, 'value': i} for i in dp_1[selected_activity][selected_metric]]
# callback for the third scatter dropdown - value
@app.callback(
dash.dependencies.Output('3rd_scatter_dropdown', 'value'),
[dash.dependencies.Input('3rd_scatter_dropdown', 'options')])
def set_3rd_scatter_dropdown_value(available_metric):
return available_metric[0]['value']
# callback for the fourth scatter dropdown - options
@app.callback(
dash.dependencies.Output('4th_scatter_dropdown', 'options'),
[dash.dependencies.Input('1st_scatter_dropdown', 'value'),
dash.dependencies.Input('2nd_scatter_dropdown', 'value'),
dash.dependencies.Input('3rd_scatter_dropdown', 'value')])
def set_4th_scatter_dropdown_options(selected_activity, selected_metric, selected_x):
return [{'label': i, 'value': i} for i in dp_1[selected_activity][selected_metric][selected_x]]
# callback for the fourth scatter dropdown - value
@app.callback(
dash.dependencies.Output('4th_scatter_dropdown', 'value'),
[dash.dependencies.Input('4th_scatter_dropdown', 'options')])
def set_4th_scatter_dropdown_value(available_x):
return available_x[0]['value']
dp_1基本上是以下形式的嵌套字典:
{activity 1:
{metric1: {x1: [y1, y2], x2: [y2, y3]},
{metric2: {x3: [y1, y4], x2: [y5, y6]},
activity 2:
...
...
}
当我执行代码时,首先它运行没有问题,但是当我在第一个下拉列表中更改选择时,该下拉列表仍然有效,但是它报告了一个回调错误,更新了4th_scatter_dropdown.options。
它显示KeyError:dp_1 [selected_activity] [selected_metric] [selected_x]->其中selected_x不可用
谢谢。