Montar a figura: título, eixos e subplots
Os códigos desta página rodam no navegador, mas não sozinhos: clique em Run Code em cada bloco, de cima para baixo.
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:
plt.figure(figsize=(largura, altura))abre uma janela gráfica nova, com tamanho em polegadas. Largura primeiro.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.- Os comandos de desenho (
plt.hist,plt.boxplot,plt.scatter,plt.plot) desenham no espaço ativo. plt.title,plt.xlabel,plt.ylabel,plt.ylimeplt.legendvalem para o espaço ativo.plt.tight_layout()ajusta os espaços para que títulos e eixos não se sobreponham.plt.savefig('arquivo.png'), se quiser salvar, vem antes doplt.show().plt.show()mostra e fecha a janela. Use um só porplt.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 umplt.show()sobrando.plt.savefigdepois doplt.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 doiloc). - Título no lugar errado.
plt.titlevale para o espaço ativo. Chame-o depois doplt.subplotcorrespondente. figsizeinvertido. É(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 queplt.xlabel('renda (em mil reais)').
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()
posicaoExercí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_alturaExercí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'
comandoComandos 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.
- Aula 07 · Atividade: boxplot e histograma (Empresa de TV) (Exercício 2 (histogramas com todas as restrições))Blackboard · notebooks da Aula 07
- Aula 09 · Atividade: dispersão, covariância e correlação (Mundo) (Exercício 2 (quatro dispersões em subplots))Blackboard · notebooks da Aula 09