Python 如何根据数据在plotly dash中创建交互式指示器

Python 如何根据数据在plotly dash中创建交互式指示器,python,callback,plotly,plotly-dash,dashboard,Python,Callback,Plotly,Plotly Dash,Dashboard,我试图用plotly编写一个交互式仪表板,但这是我第一次使用python,所以我想我可能误解了一些东西。 我有一个名为tabela_simples.csv的csv文件,其中包含随机数据,但我现在使用的三列是data,即格式为日/月/年(2021年4月22日)的日期,例如,Primeira_dose和Segunda_dose,它们都是整数 现在的目标是创建一些相应地更改日期过滤器的指示器或datepickerage,完成后,我计划创建其他图形。我的代码很长,可能很混乱或者是可以优化的,但是我已经投

我试图用plotly编写一个交互式仪表板,但这是我第一次使用python,所以我想我可能误解了一些东西。 我有一个名为
tabela_simples.csv
的csv文件,其中包含随机数据,但我现在使用的三列是
data
,即格式为日/月/年(2021年4月22日)的日期,例如,
Primeira_dose
Segunda_dose
,它们都是整数

现在的目标是创建一些相应地更改日期过滤器的指示器或
datepickerage
,完成后,我计划创建其他图形。我的代码很长,可能很混乱或者是可以优化的,但是我已经投入了很多精力

import dash 
import dash_core_components as dcc  
import dash_html_components as html  
import pandas as pd 
import plotly.graph_objects as go 
from dash.dependencies import Input, Output
from datetime import date 
df = pd.read_csv('tabela_simples.csv')
df['Data'] = pd.to_datetime(df['Data'],format='%d/%m/%Y')
df = df.set_index('Data')
external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
app.layout = html.Div(children=[
    ## cards   
    html.Div([
        dcc.DatePickerRange(
            id='date-picker-range',
            display_format='DD-MM-YYYY'
            ),
        dcc.Graph(id='card_fig')
    ]),
    ]) 
@app.callback(
    [Output(component_id='card_fig',component_property='figure')] 
    [Input(component_id='date-picker-range', component_property='start_date'),
    Input(component_id='date-picker-range', component_property='end_date')]
)
def update_figure(start_date,end_date):    
    my_df = df[df['Data'] <= end_date & df[df['Data'] >= start_date]
    card = go.Figure()
    card.add_trace(go.Indicator(
        mode = "number+delta",
        value = my_df['Primeira_dose'].sum(),
        title= "Primeira dose",
        number = { 'font': { 'size': 50 }},
        domain = {'row': 0, 'column': 1}))
    card.add_trace(go.Indicator(
        mode = "number+delta",
        value = my_df['Segunda_dose'].sum(),
        title= "Primeira dose",
        number = { 'font': { 'size': 50 }},
        domain = {'row': 0, 'column': 2}))            
    card.update_layout(
        grid = {'rows': 1, 'columns': 2, 'pattern': "independent"},
        template = {'data' : {'indicator': [{
        'mode' : "number+delta",
        }]}})
    return{card}
if __name__ == '__main__':
    app.run_server(debug=True)


也许这只是一个愚蠢的错误,但我在stackoverflow中看了这么多教程和问题,我越来越困惑,所以如果有人向我解释我做错了什么,我会很感激的,我想在应用回调中你不需要方括号,这就是为什么会出现第一条错误消息。因此,如果将应用回调替换为以下内容,则应解决第一个问题:

@app.callback(
    Output(component_id='card_fig',component_property='figure'),
    Input(component_id='date-picker-range', component_property='start_date'),
    Input(component_id='date-picker-range', component_property='end_date')
)
对于第二个问题,您只需要使用以下内容修改前一行(43):

my_df = df[df['Data'] <= end_date & df['Data'] >= start_date]
my_df=df[df['Data']=开始日期]
这应该可以解决语法问题

@app.callback(
    Output(component_id='card_fig',component_property='figure'),
    Input(component_id='date-picker-range', component_property='start_date'),
    Input(component_id='date-picker-range', component_property='end_date')
)
my_df = df[df['Data'] <= end_date & df['Data'] >= start_date]