【问题标题】:Dash:graph_update with multiple drop down selection conditionDash:graph_update 具有多个下拉选择条件
【发布时间】:2019-03-21 03:11:01
【问题描述】:

您好,我是 dash 的新手,我正在尝试渲染一个图形,其输出将取决于布局上的两个下拉选择 我已经编写了以下 graph_update 逻辑,但不知何故它不起作用。

app.layout = html.Div([
    html.Div([
        html.H1('Stock Tickers'),
        dcc.Dropdown(
            id='my-dropdown',
            options=[
                {'label': 'A', 'value': 'A'},
                {'label': 'B', 'value': 'B'},
                {'label': 'C', 'value': 'C'}
            ],
            value='A'
        )
    ],
        style={'width': '20%', 'display': 'inline-block'}
    ),
    dcc.Dropdown(
        id='my-dropdown1',
        options=[
            {'label': '250,000', 'value': '250000'},
            {'label': '500,000', 'value': '500000'},
            {'label': '750,000', 'value': '750000'},
            {'label': '1,000,000', 'value': '1000000'}
        ],
        value='250000'
    ),
    dcc.Graph(id='my-graph')
], className="container")

@app.callback(Output('my-graph', 'figure'),
              [Input('my-dropdown', 'value'), Input('my-dropdown1', 'value')])

 def update_graph(selected_dropdown_value, selected_imp_value):
     dff = df[(df['Demo'] == selected_dropdown_value) & (df['Imp_cap'] == selected_impresession_value)]
     return {
         'data': [{
             'x': dff.Imp
             'y': dff.user,
             'line': {
                 'width': 3,
                 'shape': 'spline'
             }
         }],
         'layout': {
             'margin': {
                 'l': 30,
                 'r': 20,
                 'b': 30,
                 't': 20
             }
         }
     }

希望有人能帮我解决问题

提前非常感谢!!

【问题讨论】:

  • 如果没有示例数据框,这很难做到。但是,您可以在开始时纠正几个语法错误。在'x': dff.Imp 后面需要一个逗号,并且需要将selected_impresession_value 更改为selected_imp_value,因为这是您为函数定义参数的方式。如果您可以编辑您的帖子以包含示例 df,我会尽力提供更多帮助!
  • 您好coralvanda,感谢您的回复。真的很感激。我设法做到了。我不确定这是否是最好的方法。有什么想法吗??

标签: python graph plotly plotly-dash


【解决方案1】:

这就是我们设法做到的方式。这不是什么特别的天才,只是写作的方式。

def update_graph(n_clicks, input1, input2, input3, input4):
    dff = df[df['Demo'] == input1]
    df1 = dff[dff['Month'] == input2]
    df2 = df1[df1['Imp'] == input3]
    df3 = df2[df2['imp_cap'] == input4]
    if n_clicks < 1:
        return []
    else:
        return {
            'data': [{
                'x': df3.Variable2,
                'y': df3.Variable1,
                'line': {
                    'width': 3,
                    'shape': 'spline'
                }
            }],
            'layout': dict(
                # 'margin': {
                #     'l': 30,
                #     'r': 20,
                #     'b': 30,
                #     't': 50
                # },
                title='title',
                xaxis=dict(title='x-title'),
                yaxis=dict(title='y-title'),
                annotations=[make_annotation_item(x=df3['Variable1'].iloc[-1], y=df3['Variable2'].iloc[-1])]
            )
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 2012-02-21
    • 2015-11-03
    • 2021-08-23
    • 2010-12-31
    相关资源
    最近更新 更多