Introdução ao Matplotlib
Aprenda o que é o Matplotlib, como funciona e como criar seus primeiros gráficos em Python com exemplos de linhas, rótulos e subplots.
O Matplotlib é a biblioteca de visualização de dados mais amplamente utilizada em Python. Este capítulo explica o que é o Matplotlib, como funciona sua arquitetura principal e como produzir seus primeiros gráficos — desde um gráfico de linha mínimo até uma figura com rótulos e múltiplos painéis. Os capítulos seguintes desta seção aprofundam cada tipo de gráfico.
O que é o Matplotlib?
O Matplotlib é uma biblioteca Python de código aberto para criação de visualizações estáticas, animadas e interativas. John D. Hunter lançou a primeira versão em 2003, inicialmente para replicar os comandos de plotagem do MATLAB dentro do Python. Hoje ele serve de base para muitas ferramentas de visualização de nível mais alto (Seaborn, Pandas .plot(), SciPy) e é o padrão de facto para figuras de qualidade de publicação em ciência e engenharia.
Por que usar o Matplotlib?
- Ampla variedade de tipos de gráficos — linha, dispersão, barras, histograma, pizza, caixa, violino, mapa de calor, contorno, superfícies 3D e muito mais.
- Controle detalhado — cada elemento de uma figura (eixos, marcas de escala, fontes, cores, legendas) é acessível e configurável.
- Múltiplos formatos de saída — PNG, PDF, SVG, EPS e HTML interativo (via o backend
widget). - Integração com o ecossistema — funciona diretamente com arrays NumPy, DataFrames Pandas e SciPy.
- Gratuito e de código aberto — licença BSD, comunidade ativa, documentação extensa.
Quando escolher o Matplotlib?
Use o Matplotlib quando precisar de controle preciso e pronto para publicação sobre cada elemento visual, ou quando estiver construindo sobre um sistema que requer uma biblioteca estável e bem suportada. Para plotagens exploratórias rápidas em DataFrames, o .plot() integrado do Pandas (que chama o Matplotlib por baixo) costuma ser mais rápido de escrever. Para gráficos estatísticos com uma API de nível mais alto, o Seaborn é um complemento popular que ainda permite retornar ao Matplotlib para ajustes finos.
Como o Matplotlib é Estruturado
Entender a arquitetura de duas camadas do Matplotlib evita muita confusão mais adiante.
Os objetos Figure e Axes
Toda visualização do Matplotlib vive dentro de uma Figure. Uma Figure é o contêiner de nível superior — pense nela como a tela. Dentro de uma Figure você posiciona um ou mais objetos Axes. Um Axes é a área de plotagem real que contém o eixo x, o eixo y, marcas de escala, linhas de grade e os dados.
Figure
└── Axes (one or more)
├── x-axis (XAxis)
├── y-axis (YAxis)
├── Title
├── Lines / Patches / Collections (the plotted data)
└── LegendEstilo pyplot versus estilo orientado a objetos
O Matplotlib expõe duas interfaces:
Estilo pyplot — um conjunto de funções em matplotlib.pyplot que gerenciam automaticamente a Figure e os Axes atuais. Isso espelha o fluxo de trabalho do MATLAB e é conveniente para scripts rápidos e pontuais.
Estilo orientado a objetos (OO) — você cria objetos Figure e Axes explicitamente e chama métodos neles. Isso é preferido em código de produção, funções e qualquer script que crie mais de uma figura, pois deixa claro exatamente em quais eixos cada comando age.
Ambos os estilos produzem saída idêntica. Os exemplos neste capítulo usam o estilo OO e indicam onde o atalho pyplot difere.
Instalando o Matplotlib
O Matplotlib não faz parte da biblioteca padrão do Python. Instale-o com pip:
pip install matplotlibSe você usa Anaconda ou Miniconda, o Matplotlib já está incluído por padrão. Para instalá-lo explicitamente:
conda install matplotlibVerifique a instalação:
python -c "import matplotlib; print(matplotlib.__version__)"Importando o Matplotlib
A convenção de importação padrão em toda a comunidade Python é:
Importação padrão do Matplotlib
import matplotlib.pyplot as pltO alias plt é universal — todo tutorial, livro e resposta no Stack Overflow o utiliza, então mantenha-o.
Se você também precisa do NumPy (comum para gerar dados):
Importar Matplotlib e NumPy juntos
import numpy as np
import matplotlib.pyplot as pltSeu Primeiro Gráfico
O script Matplotlib mais simples possível: duas listas de números, uma chamada a plot(), uma chamada a show().
Gráfico de linha mínimo
import matplotlib.pyplot as plt
x = [0, 1, 2, 3, 4]
y = [0, 1, 4, 9, 16]
fig, ax = plt.subplots() # create Figure and Axes
ax.plot(x, y) # draw a line through the points
plt.show() # open the display window (scripts only)plt.subplots() retorna uma tupla (fig, ax). A maior parte do código nesta seção usa esse padrão porque deixa explícito em quais Axes você está desenhando.
Em notebooks Jupyter, plt.show() é opcional — os gráficos são renderizados inline automaticamente quando uma célula termina de executar.
Em scripts autônomos, plt.show() abre uma janela e pausa a execução até que ela seja fechada. Sem ele, o script termina antes que a janela apareça.
Adicionando Rótulos e um Título
Rótulos de eixo e um título transformam um gráfico bruto em uma figura legível.
Gráfico de linha com rótulos e título
import matplotlib.pyplot as plt
x = [0, 1, 2, 3, 4]
y = [0, 1, 4, 9, 16]
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xlabel('x')
ax.set_ylabel('x squared')
ax.set_title('Square Numbers')
plt.show()| Método | O que define |
|---|---|
ax.set_xlabel('text') | Rótulo no eixo horizontal |
ax.set_ylabel('text') | Rótulo no eixo vertical |
ax.set_title('text') | Título acima do gráfico |
Consulte o capítulo Matplotlib Labels para opções de tamanho de fonte, peso e posicionamento.
Personalizando o Estilo de Linha e a Cor
ax.plot() aceita argumentos de palavra-chave que controlam a aparência visual da linha.
Linha vermelha tracejada
import matplotlib.pyplot as plt
x = [0, 1, 2, 3, 4]
y = [0, 1, 4, 9, 16]
fig, ax = plt.subplots()
ax.plot(x, y, color='red', linestyle='--', linewidth=2)
ax.set_title('Dashed Red Line')
plt.show()Valores comuns de linestyle: '-' (sólido, padrão), '--' (tracejado), ':' (pontilhado), '-.' (traço-ponto).
Cores nomeadas comuns: 'blue', 'red', 'green', 'orange', 'purple', 'black'. Códigos hexadecimais como '#1f77b4' também funcionam.
Consulte Matplotlib Line e Matplotlib Markers para uma lista completa de opções de estilo.
Plotando Múltiplas Linhas e Adicionando uma Legenda
Chame ax.plot() mais de uma vez para sobrepor múltiplas linhas nos mesmos Axes. Passe label= a cada chamada e depois chame ax.legend() para renderizar a caixa de legenda.
Duas linhas sobrepostas com legenda
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2 * np.pi, 100)
fig, ax = plt.subplots()
ax.plot(x, np.sin(x), label='sin(x)')
ax.plot(x, np.cos(x), label='cos(x)', linestyle='--')
ax.set_xlabel('Angle (radians)')
ax.set_ylabel('Value')
ax.set_title('Sine and Cosine')
ax.legend()
plt.show()np.linspace(0, 2 * np.pi, 100) cria 100 números igualmente espaçados de 0 a 2π — uma maneira conveniente de produzir curvas suaves.
Criando Subplots
plt.subplots(rows, cols) cria uma grade de Axes dentro de uma única Figure. Você acessa cada Axes pelo índice.
Grade 2×2 com diferentes tipos de gráficos
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)
fig, axs = plt.subplots(2, 2, figsize=(8, 6))
axs[0, 0].plot(x, y)
axs[0, 0].set_title('Line')
axs[0, 1].scatter(x[::5], y[::5]) # every 5th point
axs[0, 1].set_title('Scatter')
axs[1, 0].bar(['A', 'B', 'C'], [3, 7, 5])
axs[1, 0].set_title('Bar')
axs[1, 1].hist(np.random.randn(500), bins=20)
axs[1, 1].set_title('Histogram')
fig.tight_layout() # prevent overlapping labels
plt.show()fig.tight_layout() ajusta automaticamente o espaçamento entre subplots para que títulos e rótulos não se sobreponham. É quase sempre uma boa ideia chamá-lo ao usar subplots.
Consulte Matplotlib Subplot para mais informações sobre layouts em grade, eixos compartilhados e GridSpec.
Salvando Figuras
Para salvar uma figura em um arquivo em vez de exibi-la interativamente, chame fig.savefig() antes de plt.show().
Salvar uma figura como PNG e PDF
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [4, 5, 6])
ax.set_title('Saved Figure')
fig.savefig('my_plot.png', dpi=150) # raster: PNG at 150 DPI
fig.savefig('my_plot.pdf') # vector: PDF (no DPI needed)
plt.show()O argumento dpi (pontos por polegada) controla a resolução para formatos raster. dpi=150 é um bom equilíbrio entre tamanho de arquivo e qualidade de impressão; dpi=300 é o padrão para figuras em periódicos científicos.
Os formatos suportados incluem PNG, PDF, SVG, EPS e TIFF. O Matplotlib detecta o formato a partir da extensão do arquivo automaticamente.
O que vem a seguir
Este capítulo apresentou os conceitos principais do Matplotlib. O restante da seção Python Matplotlib aborda cada tópico em profundidade:
- Matplotlib Get Started — instalação e primeiros passos em detalhes
- Matplotlib Pyplot — a interface pyplot explicada
- Matplotlib Plotting — fundamentos de plotagem
- Matplotlib Line — gráficos de linha e estilo
- Matplotlib Markers — marcadores de pontos de dados
- Matplotlib Labels — rótulos de eixo, títulos e anotações
- Matplotlib Grid — adicionar e estilizar linhas de grade
- Matplotlib Subplot — figuras com múltiplos painéis
- Matplotlib Scatter — gráficos de dispersão
- Matplotlib Bars — gráficos de barras
- Matplotlib Histograms — gráficos de distribuição
- Matplotlib Pie Charts — gráficos de pizza e rosca