1
resposta

Matplotlib - seleção de periodos no gráfico

Olá, boa tarde! Estou tentando criar um gráfico a partir de um df, contendo as variaves 'Data' e 'Variação Mensal' a ultima já esta como (float64) e a data está como object. Quando eu a converto para datetime o gráfico fica distorsionado (imagem 01), e quando o deixo como objeto eu não consigo realizar uma seleção de um período determinado como eu poderia fazer com ele sendo 'datetime', como eu posso estar fazendo uma seleção com a variável sendo um object?

Outro problema é a sobreposição no eixo X, como eu posso solucionar esse problema, ou seja, aumentando o intervalo entre uma data e outra? Assim fica o Gráfico quando está 'Datetime' Insira aqui a descrição dessa imagem para ajudar na acessibilidade

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

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

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

1 resposta

Olá, Leonardo, tudo bem?

Quando trabalhamos com as datas no formato datetime para plotar dados temporais é importante definir um intervalo de como queremos exibir nossos dados. Aconselho a ler um pouco mais sobre o módulo dates do matplotlib.

Para te ajudar nesse ponto, basicamente você precisaria importar essa biblioteca, e utilizar 2 métodos para executar em cima do eixo x (xaxis), que seriam o set_major_formater (para formatar como quer exibir os valores das datas e o set_major_locator ( para definir um intervalo de exibição das datas). No exemplo abaixo eu formato a data em mês-ano (por exemplo, 01/02) e divido o intervalo de 3 em 3 meses, como voê pode visualizar num gráfico exemplo mais abaixo:

# módulo para edição de dados de tempo
import matplotlib.dates as mdates

# ajustando a forma de exibição das datas no eixo x
ax.xaxis.set_major_formatter(mdates.DateFormatter('%m-%y'))

# ajustando o intervalo entre valores de 90 dias (ou seja, 3 meses)
ax.xaxis.set_major_locator(mdates.DayLocator(interval=90))

# Inclinando a exibição das datas para não sobreporem uma a outra
ax.tick_params(axis='x', labelrotation=45)

Gráfico exemplo com a divisão do intervalo do eixo x de 3 em 3 meses e a escrita dos intervalo no formato mm-yy

Espero ter ajudado!

Forte abraço!

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