Spaces:
Running
Running
File size: 2,613 Bytes
dfdb553 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | 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)
@app.callback(
Output("grafico-barras", "figure"),
Output("total-card", "children"),
Output("media-card", "children"),
Output("max-card", "children"),
Input("coluna-dropdown", "value")
)
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__ == "__app__":
app.run_server(host="0.0.0.0", port=7860, debug=False) |