So, here is the full code:
from dash import Dash, html, dcc, Input, Output, State
import dash_bootstrap_components as dbc
import plotly.express as px
import pandas as pd
import numpy as np
#================================================#
app = Dash(__name__, external_stylesheets= [dbc.themes.LUX])
df = pd.read_csv('df.csv')
df_fun = pd.read_csv('df_fun.csv')
#================================================#
fig = px.histogram(
df,
y= 'Categoria',
color= 'GĂȘnero',
template= 'plotly_white',
barmode= 'group',
title= '<b>FORĂA DE TRABALHO POR GĂNERO</b>',
category_orders= {
'Categoria': [
'Membra/Membro',
'Analista',
'TĂ©cnica/TĂ©cnico',
'Pessoal sem vĂnculo',
'Requisitada/Requisitado',
'EstagiĂĄria/EstagiĂĄrio'
],
'GĂȘnero': ['Mulheres', 'Homens']
},
hover_data= {
'GĂȘnero': False,
'Categoria': False
}
)
fig.update_layout(
font_family= 'Bahnschrift',
font_size= 13,
xaxis_title= '',
yaxis_title= '',
height= 450,
width= 900,
legend_title= '',
legend_x= 1,
legend_y= 1.25,
legend_xanchor= 'right',
xaxis_dtick= 100,
hoverlabel_font_color= 'white'
)
fig.update_traces(
marker_line_width= 0.3,
marker_line_color= 'black',
hovertemplate= (
'Total: %{x} <extra></extra>'
)
)
#================================================#
SIDEBAR_STYLE = {
"position": "fixed",
"top": 0,
"left": 0,
"bottom": 0,
"width": "13rem",
"padding": "2rem 1rem",
"background-color": "lightgray",
'color': 'black'
}
RIGHT_INFO_STYLE = {
"margin-left": "6rem",
"margin-right": "1rem",
"padding": "2rem 1rem"
}
sidebar = html.Div(
[
html.H2("MPT", className="display-4", style= {'text-align':'center', 'color':'red'}),
html.H3('Dashboard', style= {'text-align':'center', 'color':'brown'}),
html.Hr(),
html.P("Selecione abaixo as informaçÔes de interesse:", className="lead"),
html.P('Composição', style= {'font-weight':'bold', 'text-decoration': 'underline'}),
dcc.RadioItems(options=[
{'label':'Força de Trabalho Total', 'value':'FT'},
{'label':'Membras/Membros', 'value':'MM'},
{'label':'Servidores', 'value':'S'}], value= 'FT', id= 'comp'),
html.Hr(),
html.P('Gratificação', style= {'font-weight':'bold', 'text-decoration': 'underline'}),
dcc.RadioItems(options=[
{'label':'Indiferente', 'value':'Ind'},
{'label':'Com Função', 'value':'CF'},
{'label':'Sem Função', 'value':'SF'}], value= 'Ind', id= 'grat'),
html.Hr(),
html.P('Informação', style= {'font-weight':'bold', 'text-decoration': 'underline'}),
dcc.Checklist(options= ['GĂȘnero', 'Cor/Raça', 'Faixa de Idade', 'DeficiĂȘncia'], value= ['GĂȘnero'], id= 'info'),
html.Br(),
dbc.Button('Gerar', id= 'button', n_clicks= 0)
],
style= SIDEBAR_STYLE
)
app.layout = dbc.Container([sidebar,
html.Div(dcc.Graph(id= 'graph', figure= fig), style= RIGHT_INFO_STYLE)])
#================================================#
@app.callback(
Output('graph', 'figure'),
State('comp', 'value'),
State('grat', 'value'),
State('info', 'value'),
Input('button', 'n_clicks')
)
def FT_gĂȘnero(comp_value, grat_value, info_value):
if grat_value == 'Indiferente' and info_value == 'GĂȘnero' and comp_value == 'Força de Trabalho Total':
fig = px.histogram(
df,
y= 'Categoria',
color= 'GĂȘnero',
template= 'plotly_white',
barmode= 'group',
title= '<b>FORĂA DE TRABALHO POR GĂNERO</b>',
category_orders= {
'Categoria': [
'Membra/Membro',
'Analista',
'TĂ©cnica/TĂ©cnico',
'Pessoal sem vĂnculo',
'Requisitada/Requisitado',
'EstagiĂĄria/EstagiĂĄrio'
],
'GĂȘnero': ['Mulheres', 'Homens']
},
hover_data= {
'GĂȘnero': False,
'Categoria': False
}
)
fig.update_layout(
font_family= 'Bahnschrift',
font_size= 13,
xaxis_title= '',
yaxis_title= '',
height= 450,
width= 900,
legend_title= '',
legend_x= 1,
legend_y= 1.25,
legend_xanchor= 'right',
xaxis_dtick= 100,
hoverlabel_font_color= 'white'
)
fig.update_traces(
marker_line_width= 0.3,
marker_line_color= 'black',
hovertemplate= (
'Total: %{x} <extra></extra>'
)
)
elif grat_value == 'Com Função' and info_value == 'GĂȘnero' and comp_value == 'Força de Trabalho Total':
df = pd.DataFrame(
df.loc[df['Identificado de Gratificacao'] == 'Com Função', :].groupby(
['Identificado de Gratificacao', 'GĂȘnero'])['GĂȘnero'].count().reset_index(name= 'Total')
)
fig = px.pie(
df,
values= 'Total',
names= 'GĂȘnero',
template= 'plotly_white',
title= '<b>FORĂA DE TRABALHO COM FUNĂĂO, POR GĂNERO</b>',
category_orders= {'GĂȘnero': ['Mulheres', 'Homens']},
hover_data= {'GĂȘnero': False}
)
fig.update_layout(
font_family= 'Bahnschrift',
font_size= 13,
height= 650,
width= 900,
legend_x= 1.18,
legend_y= 0.8,
legend_xanchor= 'right',
hoverlabel_font_color = 'white'
)
fig.update_traces(
pull= 0.04,
textfont_color= 'white'
)
else:
df = pd.DataFrame(
df.loc[df['Identificado de Gratificacao'] == 'Sem Função', :].groupby(
['Identificado de Gratificacao', 'GĂȘnero'])['GĂȘnero'].count().reset_index(name= 'Total')
)
fig = px.pie(
df,
values= 'Total',
names= 'GĂȘnero',
template= 'plotly_white',
title= '<b>FORĂA DE TRABALHO SEM FUNĂĂO, POR GĂNERO</b>',
category_orders= {'GĂȘnero': ['Mulheres', 'Homens']},
hover_data= {'GĂȘnero': False}
)
fig.update_layout(
font_family= 'Bahnschrift',
font_size= 13,
height= 650,
width= 900,
legend_x= 1.18,
legend_y= 0.8,
legend_xanchor= 'right',
hoverlabel_font_color = 'white'
)
fig.update_traces(
pull= 0.04,
textfont_color= 'white'
)
return fig
#=================================================#
if __name__ == '__main__':
app.run_server(debug= True)
What might be wrong there? The callback error keeps appearingâŠ