Python 如何根据数据在plotly dash中创建交互式指示器
我试图用plotly编写一个交互式仪表板,但这是我第一次使用python,所以我想我可能误解了一些东西。 我有一个名为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,完成后,我计划创建其他图形。我的代码很长,可能很混乱或者是可以优化的,但是我已经投
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]