0
respostas

Desafio: gráficos de comparação - Colunas e barras

Desafio 1

import pandas as pd

vendas = pd.read_csv("https://raw.githubusercontent.com/alura-cursos/dataviz-graficos/master/dados/relatorio_vendas.csv")
vendas['data_pedido'] = pd.to_datetime(vendas['data_pedido'], format = '%Y-%m-%d')
vendas['data_envio'] = pd.to_datetime(vendas['data_envio'], format = '%Y-%m-%d')
vendas

vendas.info()

df_lucro_ano = vendas.copy()
df_lucro_ano = df_lucro_ano[['data_pedido', 'lucro']]

df_lucro_ano['ano'] = df_lucro_ano['data_pedido'].dt.year
df_lucro_ano.drop(labels = 'data_pedido', axis = 1, inplace = True)

df_lucro_ano = df_lucro_ano.groupby(['ano']).agg('sum').sort_values('lucro', ascending =True)

import matplotlib.pyplot as plt
import seaborn as sns

fig, ax = plt.subplots(figsize = (10,4))
sns.set_theme(style = 'white')

cores =  []
for ano in df_lucro_ano.index:
  if df_lucro_ano.loc[ano, 'lucro'] == df_lucro_ano.lucro.max():
    cores.append(CINZA1)
  else:
    cores.append(AZUL5)  

ax = sns.barplot(data = df_lucro_ano, x = df_lucro_ano.index, y = 'lucro', palette = cores)

ax.set_title('Lucro das lojas de Departamento de \n 2016 a 2019 ', loc = 'left', fontsize = 18, color = CINZA1)
ax.set_xlabel('')
ax.set_ylabel('')
ax.xaxis.set_tick_params(labelsize = 14, labelcolor = CINZA2)
sns.despine(left = True, bottom = True )

ax.set_yticklabels([])
for i , valor in enumerate(df_lucro_ano['lucro']):
 qtn = f'R${valor:,.0f}'.replace(',', '.')
 offset = 1e4
 ax.text(i, valor + offset, qtn, color = CINZA2, fontsize = 12, ha = 'center', va = 'center', fontweight='bold')

ax.text(3.5, 1e5,
         'O lucro registrado do ano $\\bf{2019}$\n'
         'subiu aproximadamente $\\bf{14,04}$%\n'
         'em comparação com 2018.\n',
         fontsize=14, linespacing=1.45, color=CINZA2)

plt.show()

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

Desafio 2

top_vendas = vendas.copy()
top_vendas = top_vendas[['tipo_produto', 'vendas']]
top_10 = top_vendas.groupby(['tipo_produto']).agg('sum').sort_values('vendas', ascending = False)
top_10 = top_10[:11]
top_10

import matplotlib.pyplot as plt
import seaborn as sns

fig, ax = plt.subplots(figsize = (10,4))
fig.subplots_adjust(right = 0.7)
sns.set_theme(style = 'white')

cores = [CINZA3 if i > 2 else VERDE1 for i in range(11)]
ax = sns.barplot(data = top_10, x = 'vendas', y = top_10.index, palette = cores)

ax.set_title('Top 10 produtos mais vendidos do catálogo (2016-2019)\n', fontsize=18, color=CINZA1, loc='left')
ax.set_xlabel('')
ax.set_ylabel('')
ax.set_xticklabels([])
ax.yaxis.set_tick_params(labelsize=10, labelcolor = CINZA2)
sns.despine(left = True, bottom = True)

for i, valor in enumerate(top_10['vendas']):
    qtd = f'R$ {valor:,.0f}'.replace(',','.')
    offset = 1e3  # offset de 1.000
    ax.text(valor - offset, i, qtd, color= CINZA5, fontsize=10, fontweight='bold', ha='right', va='center')

from matplotlib import transforms

def texto_colorido(x, y, texto, cores, esp=20, ax=None, **kw):
    cores = list(reversed(cores))
    t = ax.transData
    canvas = ax.figure.canvas

    for i, linha in enumerate(reversed(texto.split('\n'))):
        frases = linha.split('||')
        for s, cor in zip(frases, cores[i]):
            texto = ax.text(x, y, s, color=cor, transform=t, **kw)
            texto.draw(canvas.get_renderer())
            ex = texto.get_window_extent()
            t = transforms.offset_copy(texto._transform, x=ex.width,
                                       units='dots')

        t = transforms.offset_copy(ax.transData, x=0, y=(i + 1) * esp, units='dots')

texto_colorido(
    1.1e6, 5,                                                        # coordenadas
 'Os dados indicam que os 3 produtos || $\\bf{mais \ vendidos}$\n'     # texto
    ' foram: || $\\bf{pneus,\ ferramentas\ e\ vasos}$.\n'
    '\n'
    'Podemos notar no período mencionado também que as\n'
    'os itens do departamento de Materiais de Construção\n' 
    'possuem uma boa saída e vários itens entre os ||$\\bf{Top\ 10}$.',
    [[CINZA2, CINZA1],                # linha 1                     # cores
     [CINZA2, VERDE1],                # linha 2
     [CINZA2],                        # linha 3
     [CINZA2],                        # linha 4
     [CINZA2],                        # linha 6
     [CINZA2, CINZA1]
    ],
    esp=22,         # espaçamento
    ax=ax,          # figura onde desenhar o texto
    fontsize=10)

plt.show()

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