matplotlib

Autor

Douglas Braga

Nota

Esta seção corresponde a matplotlib, do capítulo 3 de Grus (2019).

Existem muitas ferramentas de visualização. Neste livro usamos a biblioteca matplotlib, que não é a mais moderna nem a mais bonita — mas é amplamente usada, faz parte do ecossistema científico de Python há muito tempo, e é fácil de começar a usar.

Em particular, vamos usar o módulo matplotlib.pyplot, que mantém um estado interno com o gráfico que está sendo construído: você chama uma função de cada vez para acrescentar um elemento, e depois salva ou exibe o resultado.

O exemplo mais simples é um gráfico de linha:

from matplotlib import pyplot as plt

years = [1950, 1960, 1970, 1980, 1990, 2000, 2010]
gdp = [300.2, 543.3, 1075.9, 2862.5, 5979.6, 10289.7, 14958.3]

# cria um gráfico de linha: anos no eixo x, pib no eixo y
plt.plot(years, gdp, color="green", marker="o", linestyle="solid")

# acrescenta um título
plt.title("PIB nominal")

# rotula os dois eixos
plt.xlabel("Ano")
plt.ylabel("Bilhões de $")
plt.show()
Figura 13.1: PIB nominal dos Estados Unidos, em bilhões de dólares

Repare na estrutura da chamada. plt.plot recebe duas listas do mesmo tamanho: a primeira dá as coordenadas horizontais, a segunda as verticais. O ponto i do gráfico é (years[i], gdp[i]).

Essa é a forma de praticamente toda função do matplotlib, e é por isso que zip — do Capítulo 2 — aparece tanto perto de código de gráfico: ele é o que junta ou separa essas listas paralelas.

Os parâmetros color, marker e linestyle controlam a aparência. Vale saber que existem e que quase tudo tem um padrão razoável — você não precisa especificá-los para obter um gráfico.

As três chamadas que não são opcionais

Fazer um gráfico é fácil; fazer um gráfico que se sustenta sozinho exige três linhas que muita gente pula.

plt.plot(years, gdp, color="green", marker="o", linestyle="solid")
plt.show()
Figura 13.2: O mesmo dado, sem título e sem rótulos

É o mesmo gráfico. E, fora do contexto desta página, ele não diz nada: não se sabe o que é medido, em que unidade, nem de onde vem.

Importante

Um gráfico costuma sobreviver ao texto que o acompanha. Ele vai parar num slide, numa mensagem, num relatório de outra pessoa — e chega lá sozinho.

Título, rótulo dos eixos e unidade são o mínimo para que ele continue significando alguma coisa quando isso acontecer.

Há uma exceção, e ela é estreita: quando os eixos são coordenadas abstratas — duas dimensões de um espaço construído no meio de um algoritmo, sem unidade no mundo —, rotulá-los com “x” e “y” não acrescenta nada. Nesses casos, é o título que carrega o que precisa ser carregado. Fora dela, a regra vale sem desconto: se o eixo mede alguma coisa, diga o quê.

Sobre o estado interno

Uma peculiaridade do pyplot que causa confusão: ele mantém o gráfico atual num estado global. Cada chamada modifica esse estado, e plt.show() o exibe.

Isso significa que, se você fizer dois gráficos em sequência sem limpar nada, o segundo pode herdar elementos do primeiro. Em notebook, cada célula fecha a figura ao exibi-la, então o problema não aparece. Num script longo, aparece — e a solução é plt.close() ou usar a interface orientada a objetos, com fig, ax = plt.subplots().

Você vai ver as duas formas ao longo do material. A segunda é a que se usa quando um gráfico tem vários painéis — por exemplo, para comparar duas curvas lado a lado.

Grus, Joel. 2019. Data Science from Scratch: First Principles with Python. 2nd ed. O’Reilly Media.