curso
Introdução à plotagem com Matplotlib em Python
O Matplotlib é uma biblioteca de visualização de dados avançada e muito popular em Python. Neste tutorial, discutiremos como criar gráficos de linhas, gráficos de barras e gráficos de dispersão no Matplotlib usando dados do mercado de ações em 2022. Esses são os gráficos básicos que permitirão que você comece a entender, visualizar e contar histórias sobre dados. A visualização de dados é uma habilidade essencial para todos os analistas de dados, e a Matplotlib é uma das bibliotecas mais populares para a criação de visualizações.
Este tutorial requer algum conhecimento prévio básico sobre matrizes NumPy e quadros de dados do pandas. Quando usarmos essas bibliotecas, explicaremos rapidamente o que estamos fazendo. O foco principal deste tutorial é o Matplotlib, que funciona com base nessas estruturas de dados para criar visualizações.
O Matplotlib é muito flexível e personalizável para a criação de gráficos. É necessário muito código para criar gráficos mais básicos com poucas personalizações. Ao trabalhar em um ambiente em que a análise exploratória de dados é o principal objetivo, exigindo muitos gráficos desenhados rapidamente sem tanta ênfase na estética, a biblioteca seaborn é uma ótima opção, pois se baseia no Matplotlib para criar visualizações mais rapidamente. Consulte nosso tutorial Python Seaborn para iniciantes se a análise exploratória de dados ou a criação rápida e fácil de gráficos for sua principal prioridade.
Exemplos do Matplotlib
Ao final deste tutorial, você será capaz de fazer visualizações de excelente aparência no Matplotlib. Vamos nos concentrar na criação de gráficos de linhas, gráficos de barras e gráficos de dispersão. Também nos concentraremos em como tomar decisões de personalização, como o uso de cores, como rotular gráficos e como organizá-los de forma clara para contar uma história interessante.
O conjunto de dados
O Matplotlib foi projetado para trabalhar com matrizes NumPy e quadros de dados pandas. A biblioteca facilita a criação de gráficos a partir de dados tabulares. Para este tutorial, usaremos os preços históricos do índice Dow Jones Industrial Average (DJIA) de 2022-01-01 a 2022-12-31(encontrados aqui). Você pode definir o intervalo de datas na página e, em seguida, clicar no botão "baixar uma planilha".
Carregaremos o arquivo csv, denominado HistoricalPrices.csv
, usando a biblioteca pandas
e visualizaremos as primeiras linhas usando o método .head()
.
import pandas as pd
djia_data = pd.read_csv('HistoricalPrices.csv')
djia_data.head()
Vemos que os dados incluem 4 colunas, uma Data, Abertura, Alta, Baixa e Fechamento. Os últimos 4 estão relacionados ao preço do índice durante o dia de negociação. Abaixo está uma breve explicação de cada variável.
- Data: O dia que as informações sobre o preço das ações representam.
- Aberto: O preço do DJIA às 9:30 AM ET, quando o mercado de ações abre.
- Alta: O preço mais alto que o DJIA atingiu durante o dia.
- Baixo: O preço mais baixo que o DJIA atingiu durante o dia.
- Fechar: O preço do DJIA quando o mercado parou de ser negociado às 4:00 PM ET.
Como uma etapa rápida de limpeza, também precisaremos usar o método rename()
em pandas
, pois o conjunto de dados que baixamos tem um espaço extra nos nomes das colunas.
djia_data = djia_data.rename(columns = {' Open': 'Open', ' High': 'High', ' Low': 'Low', ' Close': 'Close'})
Também garantiremos que a variável Date seja uma variável de data e hora e classificaremos em ordem crescente pela data.
djia_data['Date'] = pd.to_datetime(djia_data['Date'])
djia_data = djia_data.sort_values(by = 'Date')
Carregando o Matplotlib
Em seguida, carregaremos o submódulo pyplot
do Matplotlib para que possamos desenhar nossos gráficos. O módulo pyplot
contém todos os métodos relevantes de que precisaremos para criar gráficos e estilizá-los. Usaremos o alias convencional plt
. Também carregaremos o pandas, o numpy e o datetime em partes futuras deste tutorial.
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from datetime import datetime
Desenho de gráficos de linhas
O primeiro gráfico que criaremos será um gráfico de linhas. Os gráficos de linhas são um tipo de gráfico muito importante, pois fazem um ótimo trabalho na exibição de dados de séries temporais. Muitas vezes, é importante visualizar como os KPIs mudam ao longo do tempo para entender os padrões nos dados que podem ser acionados.
Gráficos de linhas com uma única linha
- Mostrar como desenhar um gráfico de linhas simples com uma única linha.
- Certifique-se de enfatizar o uso de plt.show() para que o gráfico seja realmente exibido.
- Faça um breve comentário sobre o enredo, incluindo a interpretação.
Podemos criar um gráfico de linhas no matplotlib usando o método plt.plot()
em que o primeiro argumento é a variável x e o segundo argumento é a variável y em nosso gráfico de linhas. Sempre que criamos um gráfico, precisamos nos certificar de chamar plt.show()
para garantir a visualização do gráfico que criamos. Visualizaremos o preço de fechamento ao longo do tempo do DJIA.
plt.plot(djia_data['Date'], djia_data['Close'])
plt.show()
Podemos ver que, ao longo do ano, o preço do índice começou em seu valor mais alto, seguido de algumas flutuações para cima e para baixo ao longo do ano. Vemos que o preço foi mais baixo por volta de outubro, seguido por um forte aumento de preço no final do ano.
Gráficos de linhas com várias linhas
Podemos visualizar várias linhas no mesmo gráfico adicionando outra chamada plt.plot()
antes da função plt.show()
.
plt.plot(djia_data['Date'], djia_data['Open'])
plt.plot(djia_data['Date'], djia_data['Close'])
plt.show()
Ao longo do ano, vemos que os preços de abertura e fechamento do DJIA foram relativamente próximos um do outro em cada dia, sem um padrão claro de um estar sempre acima ou abaixo do outro.
Adição de uma legenda
Se quisermos distinguir qual linha representa qual coluna, podemos adicionar uma legenda. Isso criará um rótulo com código de cores no canto do gráfico. Podemos fazer isso usando plt.legend()
e adicionando parâmetros de rótulo a cada chamada plt.plot()
.
plt.plot(djia_data['Date'], djia_data['Open'], label = 'Open')
plt.plot(djia_data['Date'], djia_data['Close'], label = 'Close')
plt.legend()
plt.show()
Agora vemos uma legenda com os rótulos especificados aparecer no local padrão no canto superior direito (o local pode ser especificado usando o argumento loc
em plt.legend()
).
Desenho de gráficos de barras
Os gráficos de barras são muito úteis para comparar valores numéricos entre categorias. Elas são particularmente úteis para encontrar as categorias maiores e menores.
Nesta seção, agregaremos os dados em médias mensais usando o pandas para que possamos comparar o desempenho mensal do DJIA durante 2022. Também usaremos os primeiros 6 meses para facilitar a visualização dos dados.
# Import the calendar package
from calendar import month_name
# Order by months by chronological order
djia_data['Month'] = pd.Categorical(djia_data['Date'].dt.month_name(), month_name[1:])
# Group metrics by monthly averages
djia_monthly_mean = djia_data \
.groupby('Month') \
.mean() \
.reset_index()
djia_monthly_mean.head(6)
Gráficos de barras verticais
Começaremos criando um gráfico de barras com barras verticais. Isso pode ser feito usando o método plt.bar()
com o primeiro argumento sendo a variável do eixo x (Month) e o parâmetro height
sendo o eixo y (Close). Em seguida, devemos nos certificar de chamar plt.show()
para mostrar nosso gráfico.
plt.bar(djia_monthly_mean['Month'], height = djia_monthly_mean['Close'])
plt.show()
Vemos que a maioria dos preços de fechamento do DJIA foram próximos uns dos outros, sendo que o menor valor médio de fechamento foi em junho e o maior valor médio de fechamento foi em janeiro.
Reordenação de barras em gráficos de barras
Se quisermos mostrar essas barras na ordem do preço de fechamento médio mensal mais alto para o mais baixo, poderemos classificar as barras usando o método sort_values()
no pandas e, em seguida, usando o mesmo método plt.bar().
djia_monthly_mean_srtd = djia_monthly_mean.sort_values(by = 'Close', ascending = False)
plt.bar(djia_monthly_mean_srtd['Month'], height = djia_monthly_mean_srtd['Close'])
plt.show()
Como você pode ver, é muito mais fácil ver quais meses tiveram a maior média de preço de fechamento do DJIA e quais meses tiveram as médias mais baixas. Também é mais fácil comparar os meses e classificar os meses.
Gráficos de barras horizontais
- Mostre como trocar os eixos, de modo que as barras fiquem na horizontal.
- Faça um breve comentário sobre o enredo, incluindo a interpretação.
Às vezes, é mais fácil interpretar os gráficos de barras e ler os rótulos quando fazemos o gráfico de barras com barras horizontais. Podemos fazer isso usando o método plt.hbar()
.
plt.barh(djia_monthly_mean_srtd['Month'], height = djia_monthly_mean_srtd['Close'])
plt.show()
Como você pode ver, os rótulos de cada categoria (mês) são mais fáceis de ler do que quando as barras estavam na vertical. Ainda assim, podemos comparar facilmente os grupos. Esse gráfico de barras horizontais é especialmente útil quando há muitas categorias.
Desenho de gráficos de dispersão
Os gráficos de dispersão são muito úteis para identificar relações entre duas variáveis numéricas. Isso pode lhe dar uma noção do que esperar de uma variável quando a outra variável muda e também pode ser muito informativo em sua decisão de usar diferentes técnicas de modelagem, como regressão linear ou não linear.
Gráficos de dispersão
Da mesma forma que os outros gráficos, um gráfico de dispersão pode ser criado usando pyplot.scatter()
, em que o primeiro argumento é a variável do eixo x e o segundo argumento é a variável do eixo y. Neste exemplo, analisaremos a relação entre o preço de abertura e o preço de fechamento do DJIA.
plt.scatter(djia_data['Open'], djia_data['Close'])
plt.show()
No eixo x, temos o preço de abertura do DJIA e, no eixo y, temos o preço de fechamento. Como seria de se esperar, à medida que o preço de abertura aumenta, observamos uma forte relação com o aumento do preço de fechamento também.
Gráficos de dispersão com uma linha de tendência
Em seguida, adicionaremos uma linha de tendência ao gráfico para mostrar a relação linear entre as variáveis de abertura e fechamento de forma mais explícita. Para isso, usaremos o método numpy polyfit()
e poly1d()
. O primeiro método nos dará um ajuste polinomial de mínimos quadrados em que o primeiro argumento é a variável x, a segunda variável é a variável y e a terceira variável é o grau do ajuste (1 para linear). O segundo método nos dará uma classe polinomial unidimensional que podemos usar para criar uma linha de tendência usando plt.plot().
z = np.polyfit(djia_data['Open'], djia_data['Close'], 1)
p = np.poly1d(z)
plt.scatter(djia_data['Open'], djia_data['Close'])
plt.plot(djia_data['Open'], p(djia_data['Open']))
plt.show()
Como podemos ver, a linha no plano de fundo do gráfico segue de perto a tendência do gráfico de dispersão, pois a relação entre o preço de abertura e de fechamento é fortemente linear. Vemos que, à medida que o preço de abertura aumenta, o preço de fechamento geralmente aumenta em uma taxa semelhante e linear.
Definição do título do gráfico e dos rótulos dos eixos
Os títulos dos gráficos e os rótulos dos eixos facilitam muito a compreensão de uma visualização e permitem que o visualizador entenda rapidamente o que está vendo com mais clareza. Podemos fazer isso adicionando mais camadas usando plt.xtitle()
, plt.ylabel()
e plt.xlabel()
, o que demonstraremos com o gráfico de dispersão que fizemos na seção anterior.
plt.scatter(djia_data['Open'], djia_data['Close'])
plt.show()
Mudança de cores
A cor pode ser uma ferramenta poderosa nas visualizações de dados para enfatizar determinados pontos ou contar uma história consistente com cores consistentes para uma determinada ideia. No Matplotlib, podemos alterar as cores usando cores nomeadas (por exemplo, "vermelho", "azul" etc.), código hexadecimal ("#f4db9a", "#383c4a" etc.) e tuplas vermelho-verde-azul (por exemplo (125, 100, 37), (30, 54, 121), etc.).
Linhas
Para um gráfico de linhas, podemos alterar uma cor usando o atributo color em plt.plot(). Abaixo, alteramos a cor de nossa linha de preço de abertura para "preto" e nossa linha de preço de fechamento para "vermelho".
plt.plot(djia_data['Date'], djia_data['Open'], color = 'black')
plt.plot(djia_data['Date'], djia_data['Close'], color = 'red')
plt.show()
Barras
Para barras, podemos passar uma lista para o atributo color para especificar a cor de cada linha. Digamos que queiramos destacar o preço médio em janeiro para um argumento que estamos tentando fazer sobre o quão forte foi o preço médio de fechamento. Podemos fazer isso dando a essa barra uma cor exclusiva para chamar a atenção para ela.
plt.bar(djia_monthly_mean_srtd['Month'], height = djia_monthly_mean_srtd['Close'], color = ['blue', 'gray', 'gray', 'gray', 'gray', 'gray'])
plt.show()
Pontos
Por fim, para gráficos de dispersão, podemos alterar a cor usando o atributo de cor de plt.scatter()
. Coloriremos todos os pontos em janeiro como azul e todos os outros pontos como cinza para mostrar uma história semelhante à da visualização acima.
plt.scatter(djia_data[djia_data['Month'] == 'January']['Open'], djia_data[djia_data['Month'] == 'January']['Close'], color = 'blue')
plt.scatter(djia_data[djia_data['Month'] != 'January']['Open'], djia_data[djia_data['Month'] != 'January']['Close'], color = 'gray')
plt.show()
Usando mapas de cores
Os mapas de cores são cores integradas do Matplotlib que são dimensionadas com base na magnitude do valor(documentação aqui). Em geral, os mapas de cores ficam esteticamente bem juntos e ajudam a contar uma história nos valores crescentes.
No exemplo abaixo, usamos um mapa de cores passando o preço de fechamento (variável y) para o atributo c
e o mapa de cores de plasma por meio de cmap
. Vemos que, à medida que os valores aumentam, a cor associada fica mais brilhante e amarela, enquanto a extremidade inferior dos valores é roxa e mais escura.
plt.scatter(djia_data['Open'], djia_data['Close'], c=djia_data['Close'], cmap = plt.cm.plasma)
plt.show()
Definição dos limites do eixo
Às vezes, é útil observar um intervalo específico de valores em um gráfico. Por exemplo, se o DJIA estiver sendo negociado atualmente em torno de US$ 30.000, talvez só nos importemos com o comportamento em torno desse preço. Podemos passar uma tupla para plt.xlim()
e plt.ylim()
para definir os limites x e y, respectivamente. O primeiro valor da tupla é o limite inferior, e o segundo valor da tupla é o limite superior.
Salvando lotes
Por fim, podemos salvar os gráficos que criamos no matplotlib usando o método plt.savefig()
. Podemos salvar o arquivo em vários formatos de arquivo diferentes, incluindo "png", "pdf" e "svg". O primeiro argumento é o nome do arquivo. O formato é inferido a partir da extensão do arquivo (ou você pode substituir isso com o argumento format
).
plt.scatter(djia_data['Open'], djia_data['Close'])
plt.savefig('DJIA 2022 Scatterplot Open vs. Close.png')
Leve-o para o próximo nível
Neste tutorial, abordamos os conceitos básicos do Matplotlib e agora você pode criar gráficos de linhas, gráficos de barras e gráficos de dispersão básicos. O Matplotlib é uma biblioteca avançada com muitos recursos excelentes para criar visualizações esteticamente agradáveis. Se quiser levar suas habilidades em Matplotlib para o próximo nível, faça nosso curso Introdução à visualização de dados com Matplotlib. Você também pode fazer o download da folha de dicas do Matplotlib: Plotting in Python para referência quando você começar a criar suas próprias visualizações.
Perguntas frequentes sobre o Matplotlib
O que é o Matplotlib em Python?
O Matplotlib é uma biblioteca popular de visualização de dados em Python. Ele é frequentemente usado para criar visualizações estáticas, interativas e animadas em Python. O Matplotlib permite gerar gráficos, histogramas, gráficos de barras, gráficos de dispersão, etc., com apenas algumas linhas de código.
Por que devo usar o Matplotlib para visualização de dados?
Há vários motivos. Primeiro, o Matplotlib é flexível. Ele oferece suporte a uma ampla variedade de gráficos e plotagens e se integra bem a muitas outras bibliotecas Python, como NumPy e pandas. Em segundo lugar, é uma biblioteca madura e amplamente utilizada, portanto, tem uma comunidade forte e muitos recursos e tutoriais disponíveis. Por fim, como está em Python, você pode automatizar e personalizar seus gráficos como parte de seus pipelines de dados.
Como faço para instalar o Matplotlib?
Você pode instalar o Matplotlib com o pip, o instalador de pacotes do Python. Abra seu terminal e digite: pip install matplotlib
. Se estiver usando um notebook Jupyter, você poderá executar esse comando em uma célula de código acrescentando um ponto de exclamação: !pip install matplotlib
.
Como faço para criar um gráfico básico no Matplotlib?
Aqui está um exemplo simples. Primeiro, você precisará importar a biblioteca Matplotlib. O módulo mais comumente usado é o pyplot
, que normalmente é importado com o alias plt
:
import matplotlib.pyplot as plt
Em seguida, você pode criar um gráfico de linha básico como este:
plt.plot([1, 2, 3, 4]) plt.ylabel('Some Numbers') plt.show()
Neste exemplo, o site plt.plot([1, 2, 3, 4])
é usado para plotar a lista de números especificada. A linha plt.ylabel('Some Numbers')
define o rótulo do eixo y e plt.show()
exibe o gráfico.
Saiba mais sobre Python
curso
Python for MATLAB Users
curso
Introduction to NumPy
tutorial
Gráficos de linhas no MatplotLib com Python
tutorial
Gráfico de linha de série temporal do Matplotlib
tutorial
Tutorial do Python Seaborn Line Plot: Criar visualizações de dados
tutorial
Histogramas no Matplotlib
tutorial
Tipos de gráficos de dados e como criá-los em Python
tutorial