使用plotly-dash为pandas数据帧绘制交互式图会引发回调错误更新输出



我正试图为我所拥有的时间序列数据帧创建一个基本的交互式绘图。我已经将数据读取到数据帧CCD_ 1中。它有datetime作为索引,另外两列category(有3个唯一值(,count。现在,我正在尝试使用具有以下功能的plotly dash绘制一个交互式图形

  1. 它将有一个输入框,用户应该在其中输入他们想要查看其绘图的category
  2. 如果他们输入的值在df['category'].unique()中,它将返回与该特定类别相对应的时间序列图。否则会引发错误

这是我为它编写的代码

import dash
from dash.dependencies import Input, Output
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
import plotly.express as px
app = dash.Dash()
app.layout = html.Div(children = [
html.H1(children='Dash trail'),
html.Br(),
html.Br(),
dcc.Input(id='input_id',value='',type='text'),
dcc.Graph(id='inflow_graph')
])
@app.callback(
[Output(component_id='inflow_graph',component_property='figure')],
[Input(component_id='input_id',component_property='value')])
def update_graph(input_text):
if input_text in df['category'].unique():
dff = df[df['category']==input_text]
fig = px.line(dff, x=dff.index, y=dff['count'],title='count for selected category')
return fig
else:
return 'Enter the correct category value'
if __name__=='__main__':
app.run_server(debug=True,use_reloader=False)

它正在抛出以下错误

dash.exceptions.InvalidCallbackReturnValue: The callback ..inflow_graph.figure.. is a multi-output.
Expected the output type to be a list or tuple but got:
Figure({
'data': [{'hovertemplate': 'ds=%{x}<br>ticket_count=%{y}<extra></extra>',
'legendgroup': '',
'line': {'color': '#636efa', 'dash': 'solid'},
'mode': 'lines',
'name': '',
'showlegend': False,
'type': 'scattergl',
'x': array([datetime.datetime(2020, 1, 3, 0, 0), ....(and so on my full dataframe)

我不明白我在哪里调用多个输出。如何解决此错误?

编辑:在此处添加样本数据

Category Count
date(index) 
2020-01-03    A       30
2020-01-03    B       50
2020-01-04    C       14
2020-01-04    A       16
2020-01-04    B       40

@app.callback()中,您放置了一个输出列表,其中包含一个元素。如果您这样做,您还需要返回一个列表,所以return [fig]而不是return fig

然而,您根本不需要列表,所以您的回调装饰器可以简单地如下所示:

@app.callback(
Output('inflow_graph', 'figure'),
Input('input_id', 'value'))
def update_graph(input_text):

请注意,为了简洁起见,我还删除了df0和component_property键,因为当前版本的Dash也不需要它们(但它们没有错(。

不过,回调中还有另一个问题:在else的情况下返回一个字符串,但inflow_graph.figure需要一个Figure对象或字典。您可以通过返回一个空字典(return {}(来解决此问题。

相关内容

  • 没有找到相关文章

最新更新