Pular para o conteúdo principal
InicioTutoriaisPython

Gráfico de linha de série temporal do Matplotlib

Este tutorial explora como criar e personalizar gráficos de linha de séries temporais no matplotlib.
abr. de 2024  · 8 min leer

Uma série temporal é uma coleção de observações de dados indexadas por tempo em ordem cronológica. Essas observações de dados são normalmente (mas não necessariamente) registradas em intervalos de tempo regulares. As séries temporais são usadas com frequência em bancos, comércio, marketing, ciências e outros setores. A representação visual mais comum dos dados de séries temporais é um gráfico de linhas em que o tempo é colocado no eixo x e o valor medido, no eixo y.

Neste tutorial, exploraremos como criar e personalizar gráficos de linha de séries temporais no matplotlib, uma biblioteca de plotagem principal do Python.

Primeiros passos com a plotagem de séries temporais do matplotlib

Importação de bibliotecas e carregamento de dados

Primeiro, importaremos as bibliotecas Python necessárias e carregaremos os dados - um conjunto de dados do Kaggle Daily Exchange Rates per Euro 1999-2023. Também realizaremos uma limpeza básica dos dados:

import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
from datetime import datetime

df = pd.read_csv('euro-daily-hist_1999_2022.csv')
df = df.iloc[:, [0, 4, 28, -2]]
df.columns = ['Date', 'CAD', 'NZD', 'USD']

for col in ['CAD', 'NZD', 'USD']:
    df = df[df[col] != '-']
    df[col] = pd.to_numeric(df[col])
   
df = df[df['Date'] >= '2022-12-01'].reset_index(drop=True)
print(df.head(3))
print(f'\nThe date range: {df.Date.min()}/{ df.Date.max()}')

Saída:

Date     CAD     NZD     USD
0  2023-01-27  1.4479  1.6759  1.0865
1  2023-01-26  1.4568  1.6799  1.0895
2  2023-01-25  1.4544  1.6792  1.0878

The date range: 2022-12-01/2023-01-27

Conversão de strings de data/hora em objetos de data/hora

Para trabalhar de forma eficiente com séries temporais, precisamos converter strings de data ou hora em objetos datetime usando a função pandas.to_datetime:

df['Date'] = pd.to_datetime(df['Date'])
print(df['Date'].dtypes)

Saída:

datetime64[ns]

Se precisar de uma atualização sobre como trabalhar com séries temporais em Python, você pode achar útil o curso Manipulating Time Series Data in Python.

Definição de uma coluna datetime como um índice de dataframe

Agora, vamos definir a coluna Date como um índice de dataframe usando o método set_index:

df = df.set_index('Date')
print(df.head(3))

Saída:

              CAD     NZD     USD
Date                             
2023-01-27  1.4479  1.6759  1.0865
2023-01-26  1.4568  1.6799  1.0895
2023-01-25  1.4544  1.6792  1.0878

Criação de um gráfico básico de série temporal de linha única no matplotlib

Para criar um gráfico de linha de série temporal básica, usamos o método padrão matplotlib.pyplot.plot(x, y):

plt.plot(df.index, df['CAD'])

Saída:

image1.png

Criação de um gráfico de série temporal matplotlib de várias linhas

Para criar um gráfico de série temporal com várias linhas, basta executar o método matplotlib.pyplot.plot(x, y) o número necessário de vezes:

plt.plot(df.index, df['CAD'])
plt.plot(df.index, df['NZD'])
plt.plot(df.index, df['USD'])

image4.png

O uso do loop for otimiza o código acima:

for col in ['CAD', 'NZD', 'USD']:
    plt.plot(df.index, df[col])

Saída: 

image4.png

Personalização de gráficos de séries temporais do matplotlib

Para tornar nosso gráfico de linha de série temporal mais legível e atraente, precisamos personalizá-lo. Podemos aplicar a ele alguns ajustes comuns do matplotlib, como personalizar o tamanho da figura, adicionar e personalizar um título de gráfico e rótulos de eixo, modificar as propriedades da linha, adicionar e personalizar marcadores etc. Outros ajustes são específicos dos gráficos de linha de séries temporais, como a personalização dos ticks do eixo temporal e seus rótulos ou o destaque de determinados períodos de tempo.

Personalização da figura e dos eixos

Usando os métodos padrão do matplotlib, podemos personalizar a figura e os eixos de um gráfico de linha de série temporal de várias maneiras, conforme descrito nos comentários do código abaixo:

# Adjusting the figure size
fig = plt.subplots(figsize=(16, 5))

# Creating a plot
plt.plot(df.index, df['CAD'])

# Adding a plot title and customizing its font size
plt.title('EUR-CAD rate', fontsize=20)

# Adding axis labels and customizing their font size
plt.xlabel('Date', fontsize=15)
plt.ylabel('Rate', fontsize=15)

# Rotaing axis ticks and customizing their font size
plt.xticks(rotation=30, fontsize=15)

# Changing the plot resolution - zooming in the period from 15.12.2022 till 15.01.2023
plt.xlim(pd.Timestamp('2022-12-15'), pd.Timestamp('2023-01-15'))

Saída: 

image8.png

Personalização das propriedades da linha

Assim como nos gráficos de linha comuns, é possível alterar as propriedades da linha de um gráfico de linha de série temporal, como a cor, o estilo ou a largura da linha:

plt.plot(df.index, df['CAD'], color='green', linestyle='dashed', linewidth=3)

Saída:

image5.png

Adição e personalização de marcadores

Como em qualquer gráfico de linha, podemos colocar marcadores em um gráfico de linha de série temporal e personalizar seu símbolo, cor, cor da borda e tamanho:

plt.plot(df.index, df['CAD'], marker='o', markerfacecolor='yellow', markeredgecolor='red', markersize=8)

image9.png

Personalização dos ticks do eixo do tempo

Vamos primeiro criar um gráfico de linha de série temporal básico do matplotlib com algumas personalizações essenciais:

fig = plt.subplots(figsize=(16, 5))
plt.plot(df.index, df['CAD'])
plt.title('EUR-CAD rate', fontsize=20)
plt.xlabel('Date', fontsize=15)
plt.ylabel('Rate', fontsize=15)
plt.xlim(df.index.min(), df.index.max())

Saída: 

image7.png

Vemos que, por padrão, o matplotlib exibe alguns ticks aleatórios, juntamente com seus rótulos. No entanto, talvez queiramos ter controle sobre quais ticks são exibidos no eixo do tempo. Nesse caso, precisamos fornecer uma lista das datas (ou horas) necessárias como cadeias de caracteres ou carimbos de data/hora do pandas para o método matplotlib.pyplot.xticks:

fig = plt.subplots(figsize=(16, 5))
plt.plot(df.index, df['CAD'])
plt.title('EUR-CAD rate', fontsize=20)
plt.xlabel('Date', fontsize=15)
plt.ylabel('Rate', fontsize=15)
plt.xlim(df.index.min(), df.index.max())

# Defining and displaying time axis ticks
ticks = ['2022-12-05', '2023-01-02', '2023-01-20']
plt.xticks(ticks)

Saída: 

image6.png

Acima, o matplotlib mostrou os ticks selecionados e os rotulou automaticamente.

Se quisermos exibir todos ticks, devemos fornecer uma lista dos índices da série temporal para o método matplotlib.pyplot.xticks método:

fig = plt.subplots(figsize=(16, 5))
plt.plot(df.index, df['CAD'])
plt.title('EUR-CAD rate', fontsize=20)
plt.xlabel('Date', fontsize=15)
plt.ylabel('Rate', fontsize=15)
plt.xlim(df.index.min(), df.index.max())

# Defining and displaying all time axis ticks
ticks = list(df.index)
plt.xticks(ticks, rotation=45)

Saída: 

image2.png

Personalização dos rótulos de marcação do eixo do tempo

Os rótulos dos ticks do eixo de tempo no gráfico de linhas acima podem parecer exagerados. Talvez queiramos formatá-los para torná-los mais legíveis. Para isso, podemos usar a classe matplotlib.dates.DateFormatter passando para ela uma string de formato strftime que reflete como gostaríamos de ver as datas/horas. Em seguida, fornecemos esse formatador para o método matplotlib.axis.XAxis.set_major_formatter:

fig, ax = plt.subplots(figsize=(16, 5))
plt.plot(df.index, df['CAD'])
plt.title('EUR-CAD rate', fontsize=20)
plt.xlabel('Date', fontsize=15)
plt.ylabel('Rate', fontsize=15)
plt.xlim(df.index.min(), df.index.max())
ticks = list(df.index)
plt.xticks(ticks, rotation=45)

# Formatting time axis tick labels
ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%b %d'))

Saída: 

image10.png

Esta página de documentação fornece uma lista exaustiva de todos os códigos de formato strftime possíveis.

Destaque de determinados períodos de tempo

Às vezes, podemos querer sombrear determinados períodos de tempo em um gráfico de linha de série temporal. Para isso, podemos usar o método matplotlib.pyplot.axvspan. Ele recebe dois argumentos obrigatórios: os pontos de tempo inicial e final de um período de interesse em um formato de data e hora. O método também pode receber alguns parâmetros opcionais para personalizar a aparência de uma área destacada, como cor, cor da borda, transparência, largura da linha ou padrão de preenchimento.

Vamos aplicar essa técnica ao gráfico da seção anterior:

fig, ax = plt.subplots(figsize=(16, 5))
plt.plot(df.index, df['CAD'])
plt.title('EUR-CAD rate', fontsize=20)
plt.xlabel('Date', fontsize=15)
plt.ylabel('Rate', fontsize=15)
plt.xlim(df.index.min(), df.index.max())
ticks = list(df.index)
plt.xticks(ticks, rotation=45)
ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%b %d'))

# Highlighting the time period from 15.12.2022 to 1.01.2023 and customizing the shaded area
plt.axvspan(datetime(2022, 12, 15), datetime(2023, 1, 1), facecolor='yellow', alpha=0.5, hatch='/', edgecolor='red', linewidth=5)

Saída: 

image11.png

Salvando um gráfico de linha de série temporal do matplotlib em um arquivo

Podemos optar por salvar um gráfico de linha de série temporal em um arquivo de imagem em vez de apenas exibi-lo. Para isso, usamos o método matplotlib.pyplot.savefig passando o nome do arquivo. Por exemplo, vamos voltar ao nosso primeiro gráfico básico:

plt.plot(df.index, df['CAD'])

# Saving the resulting plot to a file
plt.savefig('time series line plot.png')

image1.png

Acima, salvamos o gráfico em um arquivo chamado time series line plot.png e localizado no mesmo local do nosso programa atual.

Conclusão

Em resumo, neste tutorial, discutimos como criar e personalizar gráficos de linha de séries temporais no matplotlib, usando métodos comuns do matplotlib e outros mais avançados, específicos apenas para visualizações de séries temporais.

Depois de aprender essas técnicas fundamentais, talvez você queira se aprofundar no trabalho com dados de séries temporais e visualizá-los em Python. Nesse caso, considere explorar os seguintes recursos abrangentes, amigáveis para iniciantes e completos:

Temas

Cursos de Python

Course

Introduction to Data Visualization with Matplotlib

4 hr
171.4K
Learn how to create, customize, and share data visualizations using Matplotlib.
See DetailsRight Arrow
Start Course
Veja MaisRight Arrow
Relacionado

blog

Como aprender Python do zero em 2024: um guia especializado

Descubra como aprender Python, suas aplicações e a demanda por competências em Python. Comece sua jornada em Python hoje mesmo ​com nosso guia detalhado.
Matt Crabtree's photo

Matt Crabtree

19 min

blog

Explorando 12 das melhores ferramentas de visualização de dados em 2023 com exemplos

Há muitas ferramentas de visualização de dados disponíveis. Neste artigo, preparamos uma lista abrangente de algumas das ferramentas de visualização de dados mais úteis na ciência de dados.
Javier Canales Luna 's photo

Javier Canales Luna

17 min

blog

Mais de 60 projetos Python para todos os níveis de conhecimento

60 ideias de projetos de ciência de dados que os cientistas de dados podem usar para criar um portfólio sólido, independentemente de sua especialização.
Bekhruz Tuychiev's photo

Bekhruz Tuychiev

16 min

tutorial

Como comentar um bloco de código em Python

O uso de comentários é fundamental para trabalhar efetivamente com Python. Neste breve tutorial, aprenda a comentar um bloco de código em Python.
Adel Nehme's photo

Adel Nehme

3 min

tutorial

Como aparar uma cadeia de caracteres em Python: Três métodos diferentes

Aprenda os fundamentos do corte de caracteres à esquerda e à direita de uma string em Python.
Adel Nehme's photo

Adel Nehme

5 min

tutorial

Tutorial de Python

Em Python, tudo é objeto. Números, cadeias de caracteres (strings), DataFrames, e até mesmo funções são objetos. Especificamente, qualquer coisa que você usa no Python tem uma classe, um modelo associado por trás.
DataCamp Team's photo

DataCamp Team

3 min

See MoreSee More