1
resposta

Desafio: gráficos de composição - Acréscimos e decréscimos

Desafio 1

AZUL1, AZUL2, AZUL3, AZUL4, AZUL5, AZUL6 = '#174A7E', '#4A81BF', "#6495ED", '#2596BE', '#94AFC5', '#CDDBF3'
CINZA1, CINZA2, CINZA3, CINZA4, CINZA5, BRANCO = '#231F20', '#414040', '#555655', '#A6A6A5', '#BFBEBE', '#FFFFFF'
VERMELHO1, VERMELHO2, LARANJA1 = '#C3514E',	'#E6BAB7',	'#F79747'
VERDE1, VERDE2, VERDE3 = '#0C8040',	'#9ABB59', '#9ECCB3'

import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/alura-cursos/dataviz-graficos-composicao-relacionamento/refs/heads/main/dados/pib_br_2002_2020_estados.csv')
df.head()

pib_sp = df.copy()
pib_sp = pib_sp.query("ano == 2020 and  sigla_uf == 'SP'")[['va', 'impostos_liquidos', 'pib']]
pib_sp.rename(columns = {"pib":"PIB", "impostos_liquidos": "Impostos Líquidos", "va":"Valor Adicionado Bruto"}, inplace=True)
pib_sp = pib_sp.melt( var_name = 'Indicadores', value_name = 'Valores')
pib_sp 

pib_sp['Valores_(em texto)'] = (pib_sp['Valores']/1e9).map('R$ {:,.3f} Bi'.format)
pib_sp["Medidas"] = ["absolute", "relative", "total"]
pib_sp

import plotly.graph_objects as go

fig = go.Figure(go.Waterfall(name = '', measure = pib_sp['Medidas'], x = pib_sp['Indicadores'], y = pib_sp['Valores'], text = pib_sp['Valores_(em texto)'],                                                           textposition = 'outside', connector_line = dict(color = CINZA3), increasing_marker = dict(color = VERDE1)))

fig.update_layout(width=1000, height=500, font_family = 'DejaVu Sans', font_size=15,
                  font_color= CINZA2, title_font_color= CINZA1, title_font_size=24,
                  title_text='Distribuição do Produto Interno Bruto (PIB) de São Paulo em 2020' +
                             '<br><sup size=1 style="color:#555655">Impostos líquidos e Valores ' +
                              'Adicionados Brutos de bens e serviços (em bilhões de reais)</sup>',
                  title_pad_l = 50, plot_bgcolor= BRANCO, yaxis_range=[0,2900e9], hovermode="closest")

fig.update_yaxes(showticklabels=False)
fig.update_traces(hovertemplate = "<b>%{x}</b> = %{text}")
fig.add_annotation(text='Fonte dos dados: <a href="https://sidra.ibge.gov.br/pesquisa/pib-munic/tabelas">Produto Interno Bruto | IBGE</a>',
                   align="left", xref="paper", yref = "paper", x=1, y=-0.2, showarrow=False)

fig.show()

Insira aqui a descrição dessa imagem para ajudar na acessibilidade Desafio 2

nordeste = df.copy()
anos = [x for x in range(2016,2021)]
nordeste = nordeste.query("regiao == 'Nordeste' and ano == @anos")[["ano", "va_servicos"]]
nordeste = nordeste.groupby('ano').sum().reset_index()
nordeste

nordeste['variacao_servicos'] = nordeste['va_servicos'].diff().fillna(nordeste['va_servicos']).astype('int64')
nordeste['Medidas'] = ['absolute'] + ['relative'] * 4
atualizacao = pd.DataFrame({'ano': ['Total'],
                         'va_servicos': [nordeste["va_servicos"].values[-1]],
                         'variacao_servicos': [nordeste["va_servicos"].values[-1]],
                         'Medidas': ["total"]})

nordeste = pd.concat([nordeste, atualizacao], axis = 0, ignore_index = True)
nordeste = nordeste.drop(columns  = ['va_servicos'])
nordeste['Variação servicos(em texto)'] = (nordeste['variacao_servicos']/1e9).map('R$ {:,.2f} Bi'.format)
nordeste

import plotly.graph_objects as go
import numpy as np

fig = go.Figure(go.Waterfall(name = '', measure = nordeste['Medidas'], y = nordeste['variacao_servicos'],
                             text = nordeste['Variação servicos(em texto)'], textposition = 'outside', connector_line = dict(color = CINZA1), 
                             totals_marker = dict(color =  AZUL3), increasing_marker = dict(color = VERDE1), decreasing_marker = dict(color = VERMELHO1) ))

fig.update_layout(width=1300, height=600, font_family = 'DejaVu Sans', font_size=14,
                  font_color= CINZA2, title_font_color= CINZA1, title_font_size=24, title_text='Variação do Valor Agregado dos Serviços da Região Nordeste' +
                             '<br><sup size=1 style="color:#555655">De 2016 a 2020 (em bilhões de reais)</sup>', plot_bgcolor= BRANCO, yaxis_range=[0,500e9])

fig.update_yaxes(showticklabels=False)
fig.update_xaxes(tickmode='array', tickvals=np.arange(0,6), ticktext=nordeste["ano"])
fig.update_traces(hovertemplate = "<b>%{x}</b> = %{text}")
fig.add_annotation(text="O <b>Ano de 2020</b> apresentou recuo <br> no valor agregado dos serviços.",
                   align="left", axref = 'x', ayref='y', x=4, y= 410e9, ax=4, ay=300e9,
                   arrowhead=1, arrowside = "start", showarrow=True, arrowwidth=2, arrowcolor=CINZA3,
                   bordercolor= CINZA3, borderwidth=1, borderpad=4)
fig.show()

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Olá, Paloma! Como vai?

Muito bem! Continue resolvendo os desafios e compartilhando com a comunidade Alura.

Observei que você explorou o uso de gráficos do tipo Waterfall com a biblioteca Plotly para representar a composição do PIB de forma clara e visual, utilizou muito bem a transformação dos dados com melt e ainda compreendeu o uso de anotações e formatações para enriquecer a visualização.

Permaneça postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Ícone de sugestão Para saber mais:

Sugestão de conteúdo para você mergulhar ainda mais sobre o tema:

Alguns materiais estão em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!