Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Subplots | Personalização de Gráficos
Visualização Definitiva com Python

book
Subplots

A função subplots() do pyplot serve exatamente para esse propósito. Ela foi utilizada anteriormente para criar um canvas na primeira seção, e agora será analisada em mais detalhes.

Linhas e Colunas

Os argumentos mais importantes dessa função são nrows e ncolumns, que definem o número de linhas e colunas na grade de subplots. Por padrão, ambos são 1, resultando em um único gráfico (Axes).

A função subplots() retorna um objeto Figure e um objeto Axes ou um array de objetos Axes, dependendo do tamanho da grade.

import matplotlib.pyplot as plt

fig, axs = plt.subplots(2, 2)

plt.show()
12345
import matplotlib.pyplot as plt fig, axs = plt.subplots(2, 2) plt.show()
copy

Uma grade de subplots 2 por 2 foi criada.

Note
Nota

Como há múltiplos subplots, subplots retorna um array de objetos Axes, geralmente armazenado em uma variável chamada axs (o singular ax é usado para um único gráfico).

Neste caso, axs é um array bidimensional, portanto, é necessário tanto o índice da linha quanto o da coluna para acessar um subplot específico.

import matplotlib.pyplot as plt
import numpy as np

data_linear = np.arange(1, 11)
data_squared = data_linear ** 2

# Creating a 2x2 subplot grid
fig, axs = plt.subplots(2, 2)

# Creating a different plot for each Axes object
axs[0, 0].plot(data_linear)
axs[0, 1].plot(data_squared)
axs[1, 0].scatter(data_linear, data_linear)
axs[1, 1].scatter(data_linear, data_squared)

plt.show()
12345678910111213141516
import matplotlib.pyplot as plt import numpy as np data_linear = np.arange(1, 11) data_squared = data_linear ** 2 # Creating a 2x2 subplot grid fig, axs = plt.subplots(2, 2) # Creating a different plot for each Axes object axs[0, 0].plot(data_linear) axs[0, 1].plot(data_squared) axs[1, 0].scatter(data_linear, data_linear) axs[1, 1].scatter(data_linear, data_squared) plt.show()
copy

A primeira linha (linha 0) possui dois gráficos de linha, e a segunda linha (linha 1) possui dois gráficos de dispersão.

Como cada gráfico é colocado em um subplot separado, não é possível utilizar plt.plot() ou plt.scatter() diretamente. A abordagem adequada é chamar o método correspondente em cada objeto Axes individualmente.

Convertendo para Array 1D

Também é possível utilizar o método .ravel() para converter um array 2D de Axes em um array achatado contíguo 1D:

import matplotlib.pyplot as plt
import numpy as np

data_linear = np.arange(1, 11)
data_squared = data_linear ** 2

# Creating a 2x2 subplot grid
fig, axs = plt.subplots(2, 2)

# Flattening axs to a 1D array for easier indexing
axs = axs.ravel()

# Creating a different plot for each Axes object
axs[0].plot(data_linear)
axs[1].plot(data_squared)
axs[2].scatter(data_linear, data_linear)
axs[3].scatter(data_linear, data_squared)

plt.show()
12345678910111213141516171819
import matplotlib.pyplot as plt import numpy as np data_linear = np.arange(1, 11) data_squared = data_linear ** 2 # Creating a 2x2 subplot grid fig, axs = plt.subplots(2, 2) # Flattening axs to a 1D array for easier indexing axs = axs.ravel() # Creating a different plot for each Axes object axs[0].plot(data_linear) axs[1].plot(data_squared) axs[2].scatter(data_linear, data_linear) axs[3].scatter(data_linear, data_squared) plt.show()
copy

Com um array 2x2, axs.ravel() o converte em um array 1D contendo quatro elementos.

Compartilhando um Eixo

A função subplots() também possui os parâmetros sharex e sharey. Eles controlam se os eixos x ou y são compartilhados entre os subplots. Ambos estão definidos como False por padrão.

import matplotlib.pyplot as plt
import numpy as np

data_linear = np.arange(1, 11)
data_squared = data_linear ** 2

# Create a 2x2 subplot grid with shared x-axis across all subplots
fig, axs = plt.subplots(2, 2, sharex=True)

# Flatten axs array for easier indexing
axs = axs.ravel()

# Plotting different data on each subplot
axs[0].plot(data_linear)
axs[1].plot(data_squared)
axs[2].scatter(data_linear, data_linear)
axs[3].scatter(data_linear, data_squared)

plt.show()
12345678910111213141516171819
import matplotlib.pyplot as plt import numpy as np data_linear = np.arange(1, 11) data_squared = data_linear ** 2 # Create a 2x2 subplot grid with shared x-axis across all subplots fig, axs = plt.subplots(2, 2, sharex=True) # Flatten axs array for easier indexing axs = axs.ravel() # Plotting different data on each subplot axs[0].plot(data_linear) axs[1].plot(data_squared) axs[2].scatter(data_linear, data_linear) axs[3].scatter(data_linear, data_squared) plt.show()
copy

Definir sharex=True compartilha o eixo x entre todos os subplots, o que é útil aqui porque todos os subplots utilizam os mesmos valores no eixo x.

Você também pode definir sharex ou sharey como 'row' para compartilhar o eixo dentro de cada linha de subplot, ou 'col' para compartilhar dentro de cada coluna de subplot.

Note
Estude Mais

Como de costume, sinta-se à vontade para explorar mais na subplots() documentação caso queira.

Tarefa

Swipe to start coding

  1. Utilize a função correta para criar uma grade de subplots.
  2. A grade deve conter 3 linhas e 1 coluna (especifique os dois primeiros parâmetros).
  3. Especifique o argumento nomeado mais à direita para que o eixo x seja compartilhado entre todos os subplots.
  4. Armazene o resultado da função de criação dos subplots nas variáveis fig e axs (da esquerda para a direita).
  5. Posicione o primeiro gráfico de linha para data_linear na primeira linha (linha 0) da grade de subplots.
  6. Posicione o segundo gráfico de linha para data_squared na segunda linha (linha 1) da grade de subplots.
  7. Posicione o terceiro gráfico de linha para data_exp na terceira linha (linha 2) da grade de subplots.

Solução

import matplotlib.pyplot as plt
import numpy as np

data_linear = np.arange(1, 11)
data_squared = data_linear ** 2
data_exp = np.exp(data_linear)

# Create a subplot grid
fig, axs = plt.subplots(3, 1, sharex=True)

# Place the first line plot on the first row
axs[0].plot(data_linear, color='red')

# Place the second line plot on the second row
axs[1].plot(data_squared, color='blue')

# Place the second line plot on the third row
axs[2].plot(data_exp, color='orange')

plt.show()
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 6
import matplotlib.pyplot as plt
import numpy as np

data_linear = np.arange(1, 11)
data_squared = data_linear ** 2
data_exp = np.exp(data_linear)

# Create a subplot grid
___, ___ = ___.___(___, ___, ___=___)

# Place the first line plot on the first row
___.plot(data_linear, color='red')

# Place the second line plot on the second row
___.plot(data_squared, color='blue')

# Place the second line plot on the third row
___.plot(data_exp, color='orange')

plt.show()

Pergunte à IA

expand
ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

some-alt