Skip to content
Tutoriais
Matplotlib
[Explicado] Vários Gráficos na Mesma Figura no Matplotlib

Dominando Vários Gráficos na Mesma Figura no Matplotlib

Criar visualizações de dados persuasivas é uma habilidade essencial no mundo da ciência de dados. Uma ferramenta inestimável nessa busca é o Matplotlib, uma biblioteca do Python construída especificamente para visualização de dados. Neste guia abrangente, mergulharemos nas especificidades de criar vários gráficos na mesma figura no Matplotlib. Essa capacidade é particularmente útil quando você precisa comparar várias tendências de dados em uma única tela, aumentando ainda mais a clareza e a legibilidade das suas visualizações de dados.

O Básico de Vários Gráficos no Matplotlib

Antes de nos aprofundarmos nas visualizações mais complexas, vamos cobrir os fundamentos de criar várias linhas em um mesmo gráfico usando o Matplotlib.

O módulo pyplot do Matplotlib facilita a criação de gráficos. Sua sintaxe é bastante semelhante à do MATLAB, o que pode ser vantajoso para aqueles familiarizados com esse sistema. Para começar, aqui está um exemplo simples que ilustra como criar uma figura com duas linhas usando diferentes conjuntos de dados:

import matplotlib.pyplot as plt
 
# Dados de exemplo
x = [1, 2, 3, 4, 5]
y1 = [1, 2, 3, 4, 5]
y2 = [5, 4, 3, 2, 1]
 
# Criar os gráficos
plt.plot(x, y1, 'b-', label='Ascendente')
plt.plot(x, y2, 'r-', label='Descendente')
 
# Incluir legenda
plt.legend(loc='best')
 
# Mostrar o gráfico
plt.show()

Neste exemplo, plt.plot(x, y1, 'b-', label='Ascendente') e plt.plot(x, y2, 'r-', label='Descendente') plotam os conjuntos de dados y1 e y2 em relação a x. Os argumentos 'b-' e 'r-' definem a cor e o tipo de linha (azul e vermelho, respectivamente), enquanto 'Ascendente' e 'Descendente' são usados como rótulos para a legenda. A chamada de função plt.legend(loc='best') posiciona a legenda no local que menos se sobrepõe às linhas plotadas.

Mais Gráficos, Mais Complexidade: API Orientada a Objetos do Matplotlib

Embora a técnica mencionada anteriormente seja simples e eficaz para gráficos simples, ela pode ser limitante ao lidar com visualizações mais complexas. É aqui que entra a API orientada a objetos do Matplotlib. Ao criar objetos Figure e Axes, você ganha um controle mais refinado sobre os elementos do gráfico. Veja como você pode usar essa API para obter o mesmo resultado de antes:

# Criar um novo objeto Figure e Axes
fig, ax = plt.subplots()
 
# Plotar os dados no Axes
ax.plot(x, y1, 'b-', label='Ascendente')
ax.plot(x, y2, 'r-', label='Descendente')
 
# Incluir legenda
ax.legend(loc='best')
 
# Mostrar o gráfico
plt.show()

Decifrando o Código: Entendendo a Abordagem Orientada a Objetos

Você pode estar se perguntando: por que alguém usaria a API orientada a objetos mais verbosa quando o módulo mais simples pyplot faz o trabalho? À medida que suas visualizações se tornam mais sofisticadas, a resposta se torna evidente. Usar os objetos Figure e Axes oferece um maior grau de controle sobre seus gráficos. Ele permite personalizações que a interface mais simples do pyplot não fornece prontamente.

Considere os objetos Figure e Axes como contêineres para o seu gráfico. O objeto Figure é a janela ou página geral em que tudo é desenhado. Ele pode conter vários objetos Axes. Cada objeto Axes, por sua vez, é um gráfico distinto com seus próprios elementos (linhas, legendas, rótulos, etc.).

Com essa compreensão, você pode ver que a abordagem orientada a objetos estabelece uma base sólida para visualizações de vários gráficos mais complexas, que exploraremos nas seções a seguir.

Múltiplos Subgráficos: Mais de um Axes em uma Figura

Já vimos a criação de múltiplas linhas em um único objeto Axes, mas e se quisermos comparar subgráficos completamente separados na mesma figura? A função subplots() do Matplotlib oferece uma maneira eficiente de fazer isso. A função subplots() cria uma nova Figura e vários objetos Axes de uma vez, retornando-os para nosso uso. Vejamos como gerar quatro subgráficos, duas linhas e duas colunas, na mesma Figura:

# Cria uma nova Figura com uma grade 2x2 de Axes
fig, axs = plt.subplots(2, 2)
 
# Define alguns dados de exemplo
x = [1, 2, 3, 4, 5]
y = [[1, 2, 3, 4, 5], [5, 4, 3, 2, 1], [2, 3, 4, 5, 6], [6, 5, 4, 3, 2]]
 
# Plotar os dados em cada Axes
for i, ax in enumerate(axs.flatten()):
    ax.plot(x, y[i])
 
# Mostrar o gráfico
plt.show()

Neste caso, plt.subplots(2, 2) cria uma grade de Axes 2x2, e axs.flatten() é usado para iterar sobre esses Axes em um simples loop for.

Múltiplos Eixos Y: Quando Um Eixo Y Não é Suficiente

Às vezes, você precisa plotar diferentes conjuntos de dados que têm escalas ou unidades diferentes no mesmo gráfico. Usar dois eixos y diferentes no mesmo gráfico é uma solução perfeita para esses cenários. Com a API orientada a objetos do Matplotlib, isso é simples:

# Cria uma nova Figura e Axes
fig, ax1 = plt.subplots()
 
# Cria um segundo Axes que compartilha o mesmo eixo x
ax2 = ax1.twinx()
 
# Plotar dados em cada Axes
ax1.plot(x, y1, 'b-', label='Conjunto de Dados 1')
ax2.plot(x, y2, 'r-', label='Conjunto de Dados 2')
 
# Definir rótulos dos eixos y
ax1.set_ylabel('Conjunto de Dados 1', color='b')
ax2.set_ylabel('Conjunto de Dados 2', color='r')
 
# Mostrar o gráfico
plt.show()

Neste caso, ax1.twinx() cria um novo Axes que compartilha o eixo x com ax1, mas tem um eixo y separado.

Alternativa ao Matplotlib: Visualize Dados com PyGWalker

Além de usar o Matplotlib para visualizar seu dataframe do pandas, aqui está uma biblioteca alternativa em Python de código aberto que pode ajudar a criar visualizações de dados facilmente: PyGWalker (opens in a new tab).

PyGWalker para visualização de dados (opens in a new tab) Não há necessidade de fazer processamento complicado com codificação Python, simplesmente importe seus dados e arraste e solte variáveis para criar todos os tipos de visualizações de dados! Aqui está um vídeo de demonstração rápida sobre a operação:


Aqui está como usar o PyGWalker no seu Jupyter Notebook:

pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)

Alternativamente, você pode experimentá-lo no Kaggle Notebook/Google Colab:

Execute o PyGWalker no Kaggle Notebook (opens in a new tab)Execute o PyGWalker no Google Colab (opens in a new tab)Dê uma ⭐️ ao PyGWalker no GitHub (opens in a new tab)
Execute o PyGWalker no Kaggle Notebook (opens in a new tab)Execute o PyGWalker no Google Colab (opens in a new tab)Execute o PyGWalker no Google Colab (opens in a new tab)

O PyGWalker é construído com o apoio da nossa comunidade de código aberto. Não se esqueça de conferir o PyGWalker GitHub (opens in a new tab) e nos dar uma estrela!

Conclusão

Dominar a arte de criar vários plots na mesma figura no Matplotlib pode levar suas habilidades de visualização de dados a um novo nível. Ao entender os conceitos básicos e se aventurar gradualmente em território mais complexo, você pode usar o Matplotlib de forma eficaz para dar vida aos seus dados.

FAQ

  1. Quais são os benefícios de criar vários plots na mesma figura no Matplotlib?

Ter vários plots na mesma figura pode melhorar significativamente a sua visualização de dados. Essa capacidade permite comparações de dados mais simples, pois você pode analisar várias tendências de dados em um único gráfico. Também melhora a clareza e a legibilidade das suas representações de dados.

  1. Quando devo usar a API orientada a objetos do Matplotlib?

Embora o módulo pyplot seja simples e útil para plots simples, a API orientada a objetos do Matplotlib é mais adequada para visualizações complexas. Ao interagir diretamente com objetos Figures e Axes, você tem um controle mais refinado sobre os elementos do plot, o que pode ser inestimável quando suas visualizações exigem um maior grau de personalização.

  1. Qual é o objetivo de ter vários eixos y em um único plot?

Múltiplos eixos y são particularmente úteis quando você deseja plotar diferentes conjuntos de dados que têm escalas ou unidades diferentes no mesmo gráfico. Ao atribuir cada conjunto de dados ao seu eixo y, você pode representar efetivamente essas diferentes escalas ou unidades sem distorcer ou deturpar seus dados.