matplotlib
matplotlib é a biblioteca fundamental de plotagem do Python. Controle figuras, eixos e todos os elementos gráficos para gráficos estáticos de qualidade para publicação.
Receita
Cartão de receita de referência rápida - pronto para copiar e colar.
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(8, 4))
ax.plot([1, 2, 3], [4, 1, 3], label="Series A")
ax.set(xlabel="Month", ylabel="Revenue", title="Q1 Performance")
ax.legend()
fig.savefig("q1.png", dpi=150, bbox_inches="tight")
plt.close(fig)Quando usar isso:
- Controle granular sobre layout, fontes e anotações
- PNG/PDF/SVG estático para relatórios e artigos
- Incorporar gráficos em jobs Python em lote sem um navegador
- Camada base para seaborn, pandas
.plotou visualizações personalizadas
Exemplo de Trabalho
import matplotlib.pyplot as plt
import numpy as np
months = np.arange(1, 13)
east = np.array([120, 130, 125, 140, 150, 155, 160, 158, 162, 170, 175, 180])
west = np.array([100, 105, 110, 108, 115, 120, 118, 122, 125, 130, 128, 135])
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4), sharey=True)
ax1.plot(months, east, marker="o", color="#2c7bb6", label="East")
ax1.plot(months, west, marker="s", color="#fdae61", label="West")
ax1.set(xlabel="Month", ylabel="Revenue ($k)", title="Regional Trends")
ax1.legend()
ax1.grid(True, alpha=0.3)
width = 0.35
ax2.bar(months - width/2, east, width, label="East", color="#2c7bb6")
ax2.bar(months + width/2, west, width, label="West", color="#fdae61")
ax2.set(xlabel="Month", title="Side-by-Side Comparison")
ax2.legend()
fig.suptitle("2025 Revenue Dashboard", fontsize=14)
fig.tight_layout()
fig.savefig("dashboard.png", dpi=200, bbox_inches="tight")
plt.close(fig)O que isso demonstra:
- API orientada a objetos com
figeaxexplícitos - Subplots com
shareypara escalas comparáveis - Gráficos mistos de linha e barras agrupadas em uma única figura
suptitle,tight_layoute exportação de alta DPI
Mergulho Profundo
Como Funciona
Figurecontém os elementos gráficos (artists);Axesfornece o sistema de coordenadas e os métodos de plotagem.- A máquina de estados do pyplot (
plt.plot) funciona bem em notebooks; prefira a abordagem OO em módulos. - Os elementos gráficos (linhas, patches, texto) são atualizados ao chamar
draw-savefigrenderiza fora da tela. - Estilos estão em
matplotlib.rcParamsou em folhas de estilo.
Métodos Comuns de Axes
| Método | Propósito |
|---|---|
plot | Linhas e marcadores |
bar / barh | Comparações categóricas |
hist | Distribuições |
scatter | Duas variáveis numéricas |
annotate | Chamadas de atenção (callouts) |
Notas de Python
import matplotlib.pyplot as plt
# Non-interactive backend for servers
import matplotlib
matplotlib.use("Agg")
# Date formatting on x-axis
import matplotlib.dates as mdates
ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m"))Armadilhas
- Vazamento de estado do pyplot entre células - figuras anteriores "vazam" para novos gráficos. Correção: sempre use
fig, ax = plt.subplots()eplt.close(fig). tight_layoutesquecido - rótulos dos eixos são cortados em PNGs salvos. Correção:fig.tight_layout()ouconstrained_layout=Truena criação.- Tamanhos de marcadores enormes em scatter - obscurecem a densidade. Correção: diminua
se aumentealpha. - Loop sem
close- milhares de figuras esgotam a RAM. Correção: useplt.close(fig)em cada iteração. - DPI incorreto para impressão - 72 DPI parece embaçado no papel. Correção: use 300 DPI para PNG ou PDF vetorial.
Alternativas
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| seaborn | Padrões estatísticos e facetas | Você precisa de controle de baixo nível dos elementos gráficos |
| Plotly | Interatividade com hover/zoom | Artigos em LaTeX estático |
| Altair | Especificações declarativas de gramática | Anotações altamente personalizadas |
| ggplot (plotnine) | Familiaridade com ggplot do R | Equipe padronizada em matplotlib |
FAQs
Figure vs Axes vs pyplot?
Figureé o contêiner;Axesé uma área de plotagem.pyploté um atalho com estado - conveniente, mas frágil em aplicações.
Como defino o tamanho da fonte global?
import matplotlib.pyplot as plt
plt.rcParams.update({"font.size": 12})Como rotaciono os rótulos dos ticks do eixo x?
ax.tick_params(axis="x", rotation=45)Como adiciono um segundo eixo y?
ax2 = ax.twinx()
ax2.plot(x, other_series, color="tab:orange")O matplotlib pode fazer subplots em uma grade?
fig, axes = plt.subplots(2, 2, figsize=(8, 8))
axes[0, 1].plot(x, y)Como colorir por categoria?
- Itere sobre as categorias e chame
ax.plotseparadamente com rótulos. - Ou use seaborn/pandas para tratamento automático de matiz (hue).
Por que meu gráfico está vazio no CI?
- Backend
Aggausente em servidores headless. - Esqueceu de chamar
savefigantes declose.
Como incorporar no Jupyter?
%matplotlib inlinepara estático; evite DPIs enormes em notebooks.- Ainda feche figuras ao gerar muitas em um loop.
Como defino escala logarítmica?
ax.set_yscale("log")O pandas.plot usa matplotlib?
- Sim - ele retorna objetos Axes que você pode ajustar ainda mais.
Relacionados
- seaborn - gráficos estatísticos sobre matplotlib
- Noções Básicas de Visualização - seleção de gráficos
- Plotagem de Grandes Volumes de Dados - subamostragem
- Melhores Práticas de Visualização - eixos honestos
Versões da Pilha: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, e uv 0.6+.