Spaces:
Running
Running
| from dash import Dash, html, dcc, Input, Output, dash_table | |
| import dash_bootstrap_components as dbc | |
| import pandas as pd | |
| import plotly.express as px | |
| df = pd.DataFrame({ | |
| "Categoria": ["A", "B", "C", "D", "E"], | |
| "Vendas": [120, 200, 150, 80, 220], | |
| "Lucro": [30, 70, 40, 20, 90] | |
| }) | |
| app = Dash(__name__, external_stylesheets=[dbc.themes.BOOTSTRAP]) | |
| app.layout = dbc.Container([ | |
| html.H1("Dashboard em Dash", className="my-4"), | |
| dbc.Row([ | |
| dbc.Col([ | |
| html.Label("Escolhe a métrica:"), | |
| dcc.Dropdown( | |
| id="coluna-dropdown", | |
| options=[ | |
| {"label": "Vendas", "value": "Vendas"}, | |
| {"label": "Lucro", "value": "Lucro"} | |
| ], | |
| value="Vendas", | |
| clearable=False | |
| ) | |
| ], md=4) | |
| ], className="mb-4"), | |
| dbc.Row([ | |
| dbc.Col(dbc.Card([ | |
| dbc.CardBody([ | |
| html.H4("Total", className="card-title"), | |
| html.H2(id="total-card") | |
| ]) | |
| ]), md=4), | |
| dbc.Col(dbc.Card([ | |
| dbc.CardBody([ | |
| html.H4("Média", className="card-title"), | |
| html.H2(id="media-card") | |
| ]) | |
| ]), md=4), | |
| dbc.Col(dbc.Card([ | |
| dbc.CardBody([ | |
| html.H4("Máximo", className="card-title"), | |
| html.H2(id="max-card") | |
| ]) | |
| ]), md=4), | |
| ], className="mb-4"), | |
| dbc.Row([ | |
| dbc.Col([ | |
| dcc.Graph(id="grafico-barras") | |
| ], md=8), | |
| dbc.Col([ | |
| dash_table.DataTable( | |
| id="tabela", | |
| columns=[{"name": i, "id": i} for i in df.columns], | |
| data=df.to_dict("records"), | |
| style_table={"overflowX": "auto"}, | |
| style_cell={"textAlign": "center"}, | |
| page_size=5 | |
| ) | |
| ], md=4) | |
| ]) | |
| ], fluid=True) | |
| def atualizar_dashboard(coluna_escolhida): | |
| fig = px.bar( | |
| df, | |
| x="Categoria", | |
| y=coluna_escolhida, | |
| color="Categoria", | |
| title=f"{coluna_escolhida} por Categoria" | |
| ) | |
| total = df[coluna_escolhida].sum() | |
| media = round(df[coluna_escolhida].mean(), 2) | |
| maximo = df[coluna_escolhida].max() | |
| return fig, total, media, maximo | |
| if __name__ == "__main__": | |
| app.run(debug=True) |