Ficou o número 4 repetido nesse código:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter
import calendar
# Dicionário de tradução de meses
meses = {
'January': 'Jan',
'February': 'Fev',
'March': 'Mar',
'April': 'Abr',
'May': 'Mai',
'June': 'Jun',
'July': 'Jul',
'August': 'Ago',
'September': 'Set',
'October': 'Out',
'November': 'Nov',
'December': 'Dez'
}
# Paleta de cores da Zoop
CINZA_1 = "#F2F2F2" # Fundo da figura e do gráfico
CINZA_5 = "#595959" # Título
AZUL_1 = "#0A59A3" # Linhas e textos
VERMELHO_1 = "#C60C30" # Cor para os círculos e números
# Supondo que df['data'] está no formato datetime and df['faturamento'] contém os valores
# Criação da coluna com nomes dos meses
df['mes'] = df['data'].dt.strftime('%B')
# Ordenação dos meses corretamente
meses_ordem = list(calendar.month_name)[1:] # ['January', ..., 'December']
# Agrupamento e soma do faturamento por mês, reordenando
vendas_mensais = (
df.groupby('mes')['faturamento']
.sum()
.reindex(meses_ordem)
)
# Função para formatar os valores do eixo Y como "R$ x.xx M"
def formatar_milhoes(valor, pos):
return f"R$ {valor / 1_000_000:.2f} M"
# Criar a figura e os eixos
fig, ax = plt.subplots(figsize=(12, 6), facecolor=CINZA_1)
ax.set_facecolor(CINZA_1)
# Plot da linha com marcadores
ax.plot(
vendas_mensais.index,
vendas_mensais.values,
marker='o',
color=AZUL_1,
linewidth=2
)
# Título da figura
ax.set_title(
"Vendas totais mensais em 2023",
fontsize=18,
color=CINZA_5,
pad=15
)
# Configurações do eixo Y
ax.yaxis.set_major_formatter(FuncFormatter(formatar_milhoes))
ax.tick_params(axis='y', labelsize=12, labelcolor=AZUL_1)
# Configurações do eixo X
ax.tick_params(axis='x', labelsize=12, labelcolor=AZUL_1)
# Remove os labels dos eixos
ax.set_xlabel("")
ax.set_ylabel("")
# Remove as bordas superior e direita
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
# Alterar rótulos do eixo x utilizando o dicionário de tradução
plt.xticks(vendas_mensais.index, [meses[mes] for mes in vendas_mensais.index], fontsize=12, color=AZUL_1)
# Adicionar círculos numerados
for i, point in enumerate([(4, vendas_mensais.iloc[4]), (7, vendas_mensais.iloc[7]), (10, vendas_mensais.iloc[10]), (11, vendas_mensais.iloc[11])], start=1):
plt.scatter(point[0], point[1], s=200, color='none', edgecolors=VERMELHO_1, alpha=0.7)
plt.text(point[0] - 0.3, point[1] + 0.1, str(i), fontsize=12, color=VERMELHO_1)
# Add the number to the left of the circle
ax.text(idx - 0.5, y, str(i), color=VERMELHO_1, fontsize=14, ha='right', va='center')
# Ajusta layout
plt.tight_layout()
plt.show()