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()
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()