1
resposta

Desafio: gráficos de composição - Muitos períodos

Desafio 1

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_adespss = df.copy()
df_adespss = df_adespss[[ 'ano','regiao', 'va_adespss']]
df_adespss = pd.crosstab(index = df_adespss['ano'], columns = df_adespss['regiao'], values = df_adespss['va_adespss'], aggfunc = 'sum', normalize= 'index')
df_adespss = (df_adespss * 100).round(2)
df_adespss = df_adespss[["Sudeste", "Sul", "Nordeste", "Centro-Oeste", "Norte"]]
df_adespss

import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(14,7))

cores = [ VERMELHO2, AZUL5, CINZA5, VERDE2, VERDE3]

df_adespss.plot(kind = 'area', stacked = True, color = cores, ax = ax, xticks = range(2002,2021,2))

plt.suptitle('PIB das Regiões do Brasil nos Setores De Administração, Defesa,\n Educação, Saúde Pública e Seguridade Social (ADESPSS)',
             fontsize = 18, color = CINZA1, ha='left', x = 0.1)
ax.set_xlabel('')
ax.set_ylabel('')
ax.xaxis.set_tick_params(labelsize=12, color = CINZA2)
ax.yaxis.set_tick_params(labelsize=12, color = CINZA2)
ax.tick_params(axis='both', which='both', length=0.5)
ax.set_frame_on(False)
ax.legend().remove()
plt.ylim(0, 110)
plt.xlim(2001.5, 2020.5)

regiao = df_adespss.columns
y_pos = [21, 48, 65, 83, 95]
for i in range(len(regiao)):
  ax.text(2011, y_pos[i], f'{regiao[i]}', color = CINZA1, weight = "bold", fontsize = 14, ha="center", transform=ax.transData)


plt.show()

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

Desafio 2

df_ind = df.copy()
df_ind = df_ind.query("ano == [2010, 2015, 2020]")[['ano', 'regiao', 'va_industria']]
df_ind = pd.crosstab(index = df_ind['ano'], columns = df_ind['regiao'], values = df_ind['va_industria'], aggfunc = 'sum', normalize = 'index')
df_ind = (df_ind * 100).round(2)
df_ind

import matplotlib.pyplot as plt

fig, ax1 = plt.subplots(figsize = (7,7))

cores = [ VERMELHO1, AZUL4, CINZA4, LARANJA1, VERDE1]

ax2 = ax1.twinx()
ax1.set_ylim([0, 65])
ax2.set_ylim([0,65])

for i in range(5):
  ax1.scatter(x = df_ind.index, y = df_ind.iloc[:, i], color = cores[i], s = 50)
  ax1.plot(df_ind.index, df_ind.iloc[:,i], color = cores[i], lw = 3)
  ax1.text(x = 2023, y = df_ind.iloc[-1,i], s = df_ind.columns[i],fontsize=15, fontweight = 'bold', linespacing=1.5, color=cores[i], va='center' )

 
ax1.set_title('PIB relativo à industria nas regiões do Brasil', fontsize = 18, color = CINZA1, loc='left', pad = 40)
ax1.text(0, 1.05, "Comparação entre os anos de 2010, 2015 e 2020 (%)", transform=ax1.transAxes, color= CINZA3, fontsize=12, ha='left', va='center')
ax1.tick_params(left = False)
ax2.tick_params(right = False)
ax1.spines[["top", "left", "right"]].set_visible(False)
ax2.set_frame_on(False)

plt.setp(ax1, xticks = [2010,2015, 2020], xticklabels = ['2010','2015', '2020'], yticks = df_ind.iloc[0,:],
         yticklabels = [f'{str(valor)}%'if i != 2 else f'{str(valor)}% \n\n' for i, valor in enumerate(df_ind.iloc[0,:])])

plt.setp(ax2, yticks = df_ind.iloc[2,:], yticklabels = [f'{str(valor)}%'if i != 2 else f'{str(valor)}% \n' for i, valor in enumerate(df_ind.iloc[2,:])])

valor = list(df_ind.loc[2015])
y_pos = [3, 9, -2, 52,15]
for i in range(len(valor)):
 ax1.text(2015,y_pos[i],f'{valor[i]}%', weight = "bold", fontsize = 14, color = cores[i], ha="center", transform=ax.transData)

for ax in (ax1, ax2):
  for i, item in enumerate(ax.get_yticklabels()):
    item.set_fontsize(14)
    item.set_fontweight('bold')
    item.set_color(cores[i])

plt.show()

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

1 resposta

Olá, Márcia! Como vai?

Parabéns pela solução dos desafios! Isso é uma forma efetiva de aprendizado para que o conhecimento seja migrado da memória de curto prazo para a memória de longo prazo. Permaneça postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Uma dica para as suas próximas postagens é postar um desafio por tópico, assim podemos te oferecer um feedback mais direcionado para aquela solução, gerando até mais organização em postagens futuras.

Ícone de sugestão Para saber mais:

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

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!