Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Dúvida] Gráfico

Ao executar o código fornecido na aula, apareceu um warning para substituir o IndexLocator por FixedLocator, mas ao executar não aparecem mais os anos no gráfico e não consegui fazê-los aparecer novamente.

ax = clientes_mensais.plot(
    kind='bar', 
    x='mês', 
    stacked=True, 
    figsize=(20, 6), 
    color=['#636EFA', '#EF553B'],
    rot=0
)
ax.bar_label(ax.containers[1], fontsize = 10)
ax.xaxis.set_minor_locator(ticker.FixedLocator([12, 0]))
ax.xaxis.set_minor_formatter(ticker.FixedFormatter(["\n\n2016", "\n\n2017"]))
sns.despine()
plt.show()

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

3 respostas

Oi William, tudo bem?

Pelo print que você compartilhou, o resultado está alinhado com o gráfico apresentado pelo instrutor. Também executei o seu código por aqui e a visualização gerada ficou exatamente igual à do exemplo mostrado em aula:

Gráfico de barras empilhadas que apresenta valores mensais de vendas ao longo de dois anos consecutivos. No eixo horizontal estão os meses, de janeiro a abril do segundo ano, e no eixo vertical os valores numéricos. Cada mês é representado por duas barras empilhadas: a parte inferior em azul corresponde a “Chimi & Churri” e a parte superior em vermelho corresponde a “Assa Frão”. Acima de cada barra está indicado o valor total da soma das duas categorias no mês. A legenda no canto superior direito identifica as cores das duas séries.

Se você estiver se referindo a algum detalhe específico da visualização ou esperava um resultado diferente, pode me detalhar para que eu consiga te ajudar de forma mais precisa.

Espero ter ajudado e fico no aguardo.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Essa é com o warning como mostrado na aula:

ax = clientes_mensais.plot(
    kind='bar', 
    x='mês',  # Seleciona as colunas do seu print
    stacked=True, 
    figsize=(20, 6), 
    color=['#636EFA', '#EF553B'],
    rot=0
)
ax.bar_label(ax.containers[1], fontsize = 10)
ax.xaxis.set_minor_locator(ticker.IndexLocator(12, 0))
# ax.xaxis.set_minor_locator(ticker.FixedLocator([12, 0]))
ax.xaxis.set_minor_formatter(ticker.FixedFormatter(["\n\n2016", "\n\n2017"]))
sns.despine()
plt.show()

Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Ao remover o warning usando FixedLocator([12, 0]) a numeração dos desaparece como mostrado na primeira iamgem.

solução!

Oi, William!

Obrigada pelo esclarecimento.

Esse comportamento pode acontecer em gráficos de barras criados com o pandas e o Matplotlib, quando o eixo X é composto por categorias, como os meses. Nesses casos, algumas tentativas de usar marcações adicionais no eixo, como minor ticks para representar os anos, nem sempre são renderizadas da forma esperada.

Para contornar essa situação, uma alternativa mais estável é tratar os anos apenas como um agrupamento visual, adicionando-os como anotações no gráfico:

ax = clientes_mensais.plot(
    x='Mês',
    kind='bar',
    stacked=True,
    color=['#636EFA', '#EF553B'],
    rot=0,
    figsize=(20, 6)
)

ax.bar_label(ax.containers[1], fontsize=10)

ticks = list(range(len(clientes_mensais)))
labels = clientes_mensais['Mês'].tolist()

ax.set_xticks(ticks)
ax.set_xticklabels(labels)

ax.text(5.5, -0.15, '2016', ha='center', va='top', transform=ax.get_xaxis_transform())
ax.text(13.5, -0.15, '2017', ha='center', va='top', transform=ax.get_xaxis_transform())

Dessa forma, evitamos mensagens de aviso e garantimos um comportamento mais consistente do gráfico.

Qualquer dúvida, fico à disposição.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!