Montar a figura: título, eixos e subplots

Organizar vários gráficos em uma figura, nomear título e eixos, fixar escalas e salvar a imagem.
Na prova · essencial Figuras bem apresentadas: título, rótulos nos eixos, legenda e plt.subplot para pôr vários gráficos na mesma figura. Guia da prova

Os códigos desta página rodam no navegador, mas não sozinhos: clique em Run Code em cada bloco, de cima para baixo.

DicaEm uma frase

Um gráfico do matplotlib é montado em camadas: plt.figure abre a janela, plt.subplot escolhe onde desenhar, os comandos de desenho e de texto preenchem cada espaço, e plt.show() fecha a janela e mostra o resultado.

A ideia

Desde a Aula 5 (boxplots lado a lado), passando pela Aula 7 (histogramas por plano) e pela Aula 9 (quatro dispersões em uma figura), usamos sempre a mesma receita. Vale conhecê-la por inteiro, porque ela serve para qualquer gráfico:

  1. plt.figure(figsize=(largura, altura)) abre uma janela gráfica nova, com tamanho em polegadas. Largura primeiro.
  2. plt.subplot(linhas, colunas, posição) divide a janela em uma grade e ativa um espaço. A posição começa em 1 no canto superior esquerdo e cresce para a direita, depois desce para a próxima linha.
  3. Os comandos de desenho (plt.hist, plt.boxplot, plt.scatter, plt.plot) desenham no espaço ativo.
  4. plt.title, plt.xlabel, plt.ylabel, plt.ylim e plt.legend valem para o espaço ativo.
  5. plt.tight_layout() ajusta os espaços para que títulos e eixos não se sobreponham.
  6. plt.savefig('arquivo.png'), se quiser salvar, vem antes do plt.show().
  7. plt.show() mostra e fecha a janela. Use um só por plt.figure.

Um bom gráfico se explica sozinho: quem olha precisa saber, sem você do lado, o que é cada eixo, em que unidade, e de que grupo se trata.

No código

1. Como os subplots são numerados. Uma grade de 2 linhas e 3 colunas tem as posições de 1 a 6.

Você também vai encontrar a forma curta plt.subplot(231): os três dígitos são linhas, colunas e posição. Ela só funciona enquanto os três números têm um dígito cada.

2. Uma figura completa. Idade dos clientes da Empresa de TV, um histograma para cada plano, lado a lado.

O plt.ylim(0, 0.07) nos dois espaços é o que permite comparar. Sem ele, cada histograma escolheria a própria escala, e barras de alturas diferentes poderiam parecer iguais. Com a mesma escala, dá para ver que o plano B concentra clientes mais jovens (a faixa de 25 a 30 anos é a mais alta), enquanto no plano A as idades se espalham até perto dos 60. As medianas confirmam: 29 anos no B e 45 no A.

3. Salvando a imagem. Para usar o gráfico em um relatório, acrescente o plt.savefig logo antes do plt.show():

plt.tight_layout()
plt.savefig('idade_por_plano.png', dpi=150)   # salva na pasta do notebook
plt.show()

Armadilhas comuns

  • plt.show() no meio do caminho. Tudo o que vier depois dele vai para uma janela nova. Se o segundo subplot saiu sozinho em outra figura, procure um plt.show() sobrando.
  • plt.savefig depois do plt.show(). A janela já foi fechada, e o arquivo sai em branco.
  • Posição começando em 0. No plt.subplot, a primeira posição é 1, não 0 (diferente do iloc).
  • Título no lugar errado. plt.title vale para o espaço ativo. Chame-o depois do plt.subplot correspondente.
  • figsize invertido. É (largura, altura). Para dois gráficos lado a lado, use uma figura larga, como (11, 4).
  • Escalas diferentes em gráficos que serão comparados. Fixe plt.ylim (e, se precisar, plt.xlim) com os mesmos valores em todos os espaços.
  • Eixos sem nome ou sem unidade. plt.xlabel('RENDA') diz menos que plt.xlabel('renda (em mil reais)').

plt.suptitle('Idade dos clientes por plano') escreve um título acima de todos os subplots. É o mesmo comando que usamos com texto vazio, plt.suptitle(''), para apagar o título automático do df.boxplot(..., by=) (veja Boxplot).

Exercícios aqui na página

Complete os ______ e clique em Run Code: a correção aparece logo abaixo. Use Show Hint para uma dica e Show Solution para ver uma resolução. O Python roda no seu navegador; na primeira vez ele leva alguns segundos para carregar.

Exercício 1

Numa grade plt.subplot(2, 3, posicao), as posições vão de 1 a 6, da esquerda para a direita e de cima para baixo. Qual é a posição do gráfico no canto inferior esquerdo?

Conte a primeira linha inteira antes de descer.

posicao = 4
plt.figure(figsize=(8, 3))
plt.subplot(2, 3, posicao)
plt.text(0.5, 0.5, 'aqui', ha='center', va='center')
plt.show()
posicao

Exercício 2

Faça os histogramas da renda do plano A (posição 1) e do plano B (posição 2) lado a lado, com as mesmas faixas e densidade. Para escolher um plt.ylim comum, guarde a maior altura entre as barras dos dois.

Um plt.ylim(0, maior_altura * 1.1) nos dois espaços deixa as escalas iguais.

faixas = np.arange(0.5, 22, 3)
plt.figure(figsize=(10, 4))
plt.subplot(1, 2, 1)
dens_a, _, _ = plt.hist(renda_a, bins=faixas, density=True, color='dodgerblue', edgecolor='white')
plt.title('PLANO A')
plt.subplot(1, 2, 2)
dens_b, _, _ = plt.hist(renda_b, bins=faixas, density=True, color='coral', edgecolor='white')
plt.title('PLANO B')
plt.tight_layout()
plt.show()
maior_altura = max(dens_a.max(), dens_b.max())
maior_altura

Exercício 3

Para salvar a figura em um arquivo, qual comando deve vir antes do plt.show()? Responda com o nome do comando, por exemplo 'plt.xlabel'.

É o comando que grava a imagem num arquivo .png.

comando = 'plt.savefig'
comando

Comandos e documentação oficial

formulário o comando está no formulário que você pode consultar na prova.

Pratique

As listas novas de revisão abrem no Google Colab (use Arquivo → Salvar uma cópia no Drive). As listas das aulas estão no Blackboard, na pasta de cada aula.