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()
Uma grade de subplots 2 por 2 foi criada.
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()
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()
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()
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.
Como de costume, sinta-se à vontade para explorar mais na
subplots()
documentação caso queira.
Swipe to start coding
- Utilize a função correta para criar uma grade de subplots.
- A grade deve conter 3 linhas e 1 coluna (especifique os dois primeiros parâmetros).
- Especifique o argumento nomeado mais à direita para que o eixo x seja compartilhado entre todos os subplots.
- Armazene o resultado da função de criação dos subplots nas variáveis
fig
eaxs
(da esquerda para a direita). - Posicione o primeiro gráfico de linha para
data_linear
na primeira linha (linha0
) da grade de subplots. - Posicione o segundo gráfico de linha para
data_squared
na segunda linha (linha1
) da grade de subplots. - Posicione o terceiro gráfico de linha para
data_exp
na terceira linha (linha2
) da grade de subplots.
Solução
Obrigado pelo seu feedback!