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.
24 de 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
172.4K
Learn how to create, customize, and share data visualizations using Matplotlib.
See DetailsRight Arrow
Start Course
Ver maisRight Arrow
Relacionado

tutorial

Gráficos de linhas no MatplotLib com Python

Este tutorial prático se aprofunda na criação e na personalização de gráficos de linhas com o Matplotlib, uma biblioteca avançada de visualização de dados em Python.

Arunn Thevapalan

11 min

tutorial

Introdução à plotagem com Matplotlib em Python

Este tutorial demonstra como usar o Matplotlib, uma poderosa biblioteca de visualização de dados em Python, para criar gráficos de linha, barra e dispersão com dados do mercado de ações.

Kevin Babitz

25 min

tutorial

Tutorial do Python Seaborn Line Plot: Criar visualizações de dados

Descubra como usar o Seaborn, uma biblioteca popular de visualização de dados em Python, para criar e personalizar gráficos de linha em Python.

tutorial

Histogramas no Matplotlib

Aprenda sobre histogramas e como você pode usá-los para obter insights dos dados com a ajuda do matplotlib.
Aditya Sharma's photo

Aditya Sharma

8 min

tutorial

Guia passo a passo para criar mapas em Python usando a biblioteca Plotly

Faça seus dados se destacarem com mapas impressionantes criados com Plotly em Python
Moez Ali's photo

Moez Ali

7 min

tutorial

Tutorial de junção de DataFrames no pandas

Neste tutorial, você aprenderá várias maneiras pelas quais vários DataFrames podem ser mesclados em python usando a biblioteca Pandas.
DataCamp Team's photo

DataCamp Team

19 min

See MoreSee More