【问题标题】:Cannot get multiple inputs and outputs to work in Dash无法让多个输入和输出在 Dash 中工作
【发布时间】:2019-08-07 13:23:55
【问题描述】:

我正在尝试从下拉列表中创建一个包含多个(1 到 4 个)输入的图表。 我希望有与所述图表中的输入一样多的条形图。不幸的是,我似乎无法让它工作。

当我“手动”创建图表时,通过在列表中包含条形列表然后调用它: (我只展示了代码的相关部分,我有 app.layout,所有必要的 div 等)

departments = ['ladies','mens','accessories','kids']
output = []
for dep in departments:
    output.append(
         go.Bar(
             name = dep,
             x = categories[(categories.category == dep)]['sales']
     ))
dcc.Graph(figure = go.Figure(data = output))

按预期工作,绘制条形图。

我尝试使用下拉部门列表进行回调:

dcc.Dropdown(
            id = 'departament_b',
            options =[
                {'label': 'Ladies', 'value': 'ladies'},
                {'label': 'Mens', 'value': 'mens'},
                {'label': 'Accessories', 'value': 'accessories'},
                {'label': 'Kids', 'value': 'kids'}
            ],
            value = ['ladies','mens','accessories','kids'],
            multi = True
        )
,
dcc.Graph(id = 'kategorie-sls')

然后我有我的回调:

@app.callback(
[Output('kategorie-sls', 'figure')],
[Input('departament_b', 'value')]
)

还有一个更新图表的函数:

def categories-sales(department_b):
    graph = []
    for dep in department_b:
        graph.append(go.Bar(
            name = dep,
            x = categories[(categories.category == dep)]['sales']
        ))

我得到了错误:

dash.exceptions.InvalidCallbackReturnValue: Invalid number of output values for ..kategorie-sls.figure...

预期 1 得到 4

如果我从下拉列表中选择 1 个值(或将其更改为 not multi 并仅将 1 个值放入 value = ['ladies'] 我会收到此错误:

Failed component prop type: Invalid component prop `figure` key `name` supplied to Graph. Bad object: { 
"name": "ladies", "x": [ 18535.059999999998 ], "type": "bar" } Valid keys: [ "data", "layout", "frames" ]

*(This error originated from the built-in JavaScript code that runs Dash apps. Click to see the full stack trace 
 or open your browser's console.)*

我尝试将输出放入字典 in this question:

return {'data' : graph}

但是我得到一个错误,输出应该是一个列表还是一个元组......

我正在努力实现的目标是否可能?

【问题讨论】:

  • 您想要做的事情是 100% 可能的。我对你的代码布局有点困惑。例如,catergories-sales 是您的回调函数,还是从回调函数中调用?我也很惊讶- 字符被允许,因为那应该是无效的语法。您可以编辑您的帖子以完全显示您的代码,或者至少尽可能多地显示您的代码吗?

标签: plotly plotly-dash


【解决方案1】:

问题是我将回调输出作为列表,但函数的实际输出不是列表,因为它应该是。 如果 callbackOutput 未定义为列表

@app.callback(Output('xx','value'),..)

然后它按预期工作。 感谢@alexcjohnson @plotly 社区论坛 https://community.plot.ly/t/cannot-get-multiple-inputs-and-multiple-outputs-to-work/26945

【讨论】:

    【解决方案2】:

    如果在一个定义函数中只有一个要返回的元素,则不要在输出中使用 list[] 假设我有 3 个元素作为输入,一个作为输出,所以我只在输入中使用 list[] 因为有多个元素所以我必须传入 list[] 并且在输出中只有一个元素通过。

    它会很有效。

    @app.callback(
        Output(component_id='crop_map', component_property='figure'),
        [Input(component_id='District', component_property='value'),
        Input(component_id='Taluk', component_property='value'),
        Input(component_id='Village', component_property='value')])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-15
      • 2019-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多