Introdução

Matplotlib é uma das bibliotecas mais importantes de visualização de dados com Python, pois muitos outras bibliotecas de gráficos são baseadas nesta biblioteca. Por isso é tão importante aprendermos o seu funcionamento.

01.Hierarquia de objetos na biblioteca Matplotlib

Na biblioteca Matplotlib temos vários objetos e cada um possui a sua hierarquia. Começamos da parte mais externa para a parte mais interna desta hierarquia:

_images/figure.png
  • Figure: objeto mais externo e que comporta um ou vários Axes.

  • Axes: objeto que de fato é o nosso gráfico (plot).

  • Outros objetos: dentro do Axes (gráfico) temos inúmeros outros elementos como: títulos, legendas e etc:

_images/outros_objetos.png

02.Abordagens para construir um gráfico (plot) com Matplotlib

02.a.Abordagem direta (stateful)

  • Abordagem direta é a mais simples e porém a mais limitada, pois nos permite trabalhar com apenas uma figure e um axes de cada vez.

  • Esta aula já possui muitos conceitos e para não adicionar um conteúdo que não usaremos não irei explicar nada sobre a abordagem direta (stateful), mas comento apenas para falar que existe.

02.b.Abordagem orientada a objeto (stateless)

A abordagem orientada a objetos é um pouco mais complexa de entender no início, mas depois entenderemos os grandes benefícios como:

  • Grande possibilidade de opções de customizar os gráficos.

  • Facilitar o aprendizado de outras bibliotecas que aprenderemos no futuro, pois estas se baseiam no Matplotlib.

03.Construindo um gráfico com a abordagem orientada a objeto

Antes de começarmos o passo a passo para construirmos os gráficos, vamos importar a biblioteca Pandas e criar o nosso DataFrame. Faremos isso a partir de um dataset de os valores das ações na bolsa de valores e que pode ser encontrado no site do Yahoo! Finanças:

1#Importando a biblioteca Pandas e apelidando de pd
2import pandas as pd
1#Criando um DataFrame a partir do nosso Dataset
2df_totvs = pd.read_csv("/content/TOTS3.SA.csv")
1#Visualizando o DataFrame
2df_totvs.head()

Este é o resultado:

_images/totvs_head.png

03.a.Importando a biblioteca Matplotlib

Para importar a biblioteca Matplotlib fazemos da seguinte forma:

1#Importando a biblioteca matplotlib e chamando de plt
2import matplotlib.pyplot as plt

Repare que após o nome da biblioteca matplotlib há o módulo pyplot que é a parte da biblioteca que trabalha para plotar gráficos com Python, dai o nome python + plot (pyplot)

03.b.Criando os objetos Figure e Axes

Lembrando que:

  • figure é o objeto de maior hierarquia (mais externo) na estrutura.

  • axes é de fato o nosso gráfico (plot) e dentro de uma figure podemos ter um ou vários axes.

_images/figura_axe.png

Para criarmos os objetos figure e axes usamos o método .subplots() do pyplot desta forma:

1fig, ax = plt.subplots()

Este é o resultado:

_images/subplot.png

Warning

Repare que como não usamos nenhum parâmetro do método .subplots() por default (padrão) é criado apenas uma linha e uma coluna, ou seja, há espaço para apenas um axes.

03.c.Plotar um gráfico

Para plotar o gráfico usamos o método .plot do Pandas e depois alocamos este gráfico dentro do objeto ax (axes).

Desta forma:

01.Criar os objetos fig e ax.

1fig. ax_01 = plt.subplots()

02.Plotar o gráfico com o método .plot() a partir do nosso DataFrame (df) e armazená-lo dentro do objeto ax.

1df.nome_variavel.plot(ax=ax_01)

03.Veja o exemplo de plotar um gráfico:

1fig. ax_01 = plt.subplots()
1df.Close.plot(ax=ax_01)

Este é o resultado:

_images/subplot_01.png

04.Customizando o gráfico

O gráfico é o próprio objeto ax_01 (axes) e por isso iremos trabalhar diretamente nele.

Estes são alguns comandos de customização:

  • .set_title() - para adicionar título ao gráfico.

  • .set_xlabel() - para adicionar nome do eixo x.

  • .set_ylabel() - para adicionar nome do eixo y

  • .plt.show() - para mostrar o gráfico.

Note

Repare que mesmo sem este método plt.show() o gráfico é apresentado, mas isso ocorre pois o Jupyter Notebook já pressupõem que iremos apresentar o gráfico. Porém, mais a diante quando não estivermos usando mais o Jupyter Notebook precisaremos deste método para poder mostrar o gráfico.

04.a.Veja o exemplo de como customizar o gráfico

1#Criando os objetos figure (fig) e axes (ax_01) com o método subplots()
2fig, ax_01 = plt.subplots()
1#Plotar o gráfico a partir do DataFrame e alocá-lo no objeto ax_01 (axes)
2df.Close.plot(ax=ax_01)
1#Adicionando título ao gráfico
2ax_01.set_title("Ações da TOTVS")
1#Adicionando nome ao eixo x
2ax_01.set_xlabel("Tempo")
1#Adicionando nome ao eixo y
2ax_01.set_ylabel("Preço")

Este é o resultado:

_images/grafico_customizado.png

05.Construindo uma figure com dois axes.

Veremos agora como construir uma figure com dois axes, ou seja, dois gráficos:

1#Criando um segundo DataFrame.
2df_magalu = pd.read_csv("/content/MGLU3.SA.csv")
1#Para ter espaço para os dois gráficos axes iremos deixar a figure com duas linhas e uma coluna.
2#Para isso, usaremos os parâmetros número de linhas nrows e número de colunas ncols.
3fig, (ax_01,ax_02) = plt.subplots(nrows=2, ncols=1)
1#Plotando dois gráficos e alocando-os nos respectivos axes (ax_01 e ax_02).
2df.Close.plot(ax=ax_01)df_magalu.Close.plot(ax=ax_02)
1#Adicionando títulos com o método set_title().
2ax_01.set_title("Ações TOTVS")ax_02.set_title("Ações MAGAZINE LUIZA")
1#Adicionando nome ao eixo x com o método set_label().
2ax_01.set_xlabel("Tempo")ax_02.set_xlabel("Tempo")
1#Adicionando nome ao eixo y com o método set_label().
2ax_01.set_ylabel("Preço")ax_02.set_ylabel("Preço")
1#Ajustando o layout com o método tight_layout().
2plt.tight_layout()
1#Para alterarmos o tamanho da figura usamos o parâmetro figsize.
2fig, (ax_01,ax_02) = plt.subplots(nrows=2,ncols=1, figsize=(largura, altura))

Este é o resultado:

_images/grafico_dois_axes.png