如何将多个输出连接到回调?



我试图创建一个下拉菜单的仪表板,每个菜单项,当选择时,加载2个数字。我做了以下操作,但无论我在下拉菜单中选择什么,输出的数字都是相同的。当我选择"3 Day Forward Return"时,我希望它显示图11和图12。

app = dash.Dash()
fig_names = ['1 Week Forward Return','3 Day Forward Return', 'Next-Day Forward Return ']
fig_dropdown = html.Div([
dcc.Dropdown(id='fig_dropdown',options=[{'label': x, 'value': x} for x in fig_names])])

fig_plot1 = dcc.Graph(id='macdwkly',figure = fig1, style={'display': 'inline-block'})
fig_plot2 = dcc.Graph(id='rsiwkly',figure = fig2, style={'display': 'inline-block'})
app.layout = html.Div([fig_dropdown, fig_plot1,fig_plot2])
@app.callback(Output('fig_plot', 'children'),
[Input('fig_dropdown', 'value')])
def update_output(fig_name):
return name_to_figure(fig_name)
def name_to_figure(fig_names):
figure = go.Figure()
if fig_name == '1 Week Forward Return':
fig1 = px.scatter(dfx, x=dfx.MACD, y=dfx.Wkly_FR, color=dfx['wkly_gt_0'])
fig2 = px.scatter(dfx, x=dfx.RSI, y=dfx.Wkly_FR, color=dfx['wkly_gt_0'])
elif fig_name == '3 Day Forward Return':
fig11 = px.scatter(dfx, x=dfx.MACD, y=dfx.Three_d_FR, color=dfx['tred_gt_0'])

fig12 = px.scatter(dfx, x=dfx.RSI, y=dfx.Three_d_FR, color=dfx['tred_gt_0'])

return dcc.Graph(figure=figure)

if __name__ == '__main__':
app.run_server()

您应该将Output('fig_plot', 'children')更正为:

[Output('macdwkly', 'figure'),Output('rsiwkly', 'figure')]
因此,name_to_figure的返回应该返回两个数字:
def name_to_figure(fig_names):
...
...
...
return (fig1 , fig2)
  • 在if-else语句中将name_to_figure内的所有变量重命名为fig1
    fig2
  • 还将变量名称fig_name更正为fig_namesif-else语句的条件。
  • 不需要go.Figure,因为你使用px.scatter代替。

最新更新