Introdução ao Matplotlib — 2025 | Python Brasil
Aprenda visualização de dados com Matplotlib em Python. Gráficos de linha, barra, pizza e mais. Comece agora!
A visualização de dados é uma etapa fundamental em qualquer análise. Números em tabelas podem ser difíceis de interpretar, mas um gráfico bem feito comunica padrões, tendências e anomalias de forma imediata. Matplotlib é a biblioteca de visualização mais consolidada do ecossistema Python, servindo como base para outras bibliotecas como Seaborn e sendo integrada ao Pandas.
Neste artigo, vamos aprender a criar os tipos de gráfico mais utilizados no dia a dia, personalizar a aparência visual e exportar figuras prontas para relatórios e apresentações.
Instalação e primeiro gráfico
Para instalar o Matplotlib, use o pip:
# No terminal:
# pip install matplotlib
Vamos começar com um gráfico simples de linha:
import matplotlib.pyplot as plt
meses = ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun"]
vendas = [12000, 15000, 13500, 18000, 16500, 21000]
plt.figure(figsize=(10, 6))
plt.plot(meses, vendas, marker="o", color="#2c3e50", linewidth=2)
plt.title("Vendas Mensais - 1o Semestre 2025", fontsize=14)
plt.xlabel("Mês")
plt.ylabel("Vendas (R$)")
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig("vendas_mensais.png", dpi=150)
plt.show()
O plt.figure(figsize=(10, 6)) define o tamanho da figura em polegadas. O tight_layout() ajusta automaticamente os espaçamentos para evitar que textos sejam cortados.
Gráfico de barras
Gráficos de barra são ideais para comparar categorias:
import matplotlib.pyplot as plt
categorias = ["Eletrônicos", "Roupas", "Alimentos", "Livros", "Esportes"]
receita = [85000, 62000, 45000, 28000, 38000]
cores = ["#3498db", "#2ecc71", "#e74c3c", "#f39c12", "#9b59b6"]
plt.figure(figsize=(10, 6))
barras = plt.bar(categorias, receita, color=cores, edgecolor="white", linewidth=1.5)
# Adicionando valores sobre as barras
for barra in barras:
altura = barra.get_height()
plt.text(
barra.get_x() + barra.get_width() / 2.,
altura + 500,
f"R$ {altura:,.0f}",
ha="center", va="bottom", fontsize=10
)
plt.title("Receita por Categoria", fontsize=14)
plt.ylabel("Receita (R$)")
plt.ylim(0, max(receita) * 1.15)
plt.tight_layout()
plt.show()
Barras agrupadas
Para comparar duas séries de dados lado a lado:
import matplotlib.pyplot as plt
import numpy as np
categorias = ["Norte", "Nordeste", "Centro-Oeste", "Sudeste", "Sul"]
meta = [30000, 45000, 25000, 80000, 55000]
realizado = [28000, 52000, 23000, 85000, 51000]
x = np.arange(len(categorias))
largura = 0.35
fig, ax = plt.subplots(figsize=(12, 6))
barras_meta = ax.bar(x - largura/2, meta, largura, label="Meta", color="#3498db")
barras_real = ax.bar(x + largura/2, realizado, largura, label="Realizado", color="#2ecc71")
ax.set_title("Meta vs Realizado por Região", fontsize=14)
ax.set_ylabel("Valor (R$)")
ax.set_xticks(x)
ax.set_xticklabels(categorias)
ax.legend()
ax.grid(axis="y", alpha=0.3)
plt.tight_layout()
plt.show()
Gráfico de pizza
Gráficos de pizza mostram a composição de um todo:
import matplotlib.pyplot as plt
linguagens = ["Python", "JavaScript", "Java", "C#", "Go", "Outras"]
percentuais = [32, 25, 18, 12, 7, 6]
cores = ["#3498db", "#f1c40f", "#e74c3c", "#9b59b6", "#1abc9c", "#95a5a6"]
destaque = [0.05, 0, 0, 0, 0, 0] # Destaca Python
plt.figure(figsize=(8, 8))
plt.pie(
percentuais,
labels=linguagens,
colors=cores,
explode=destaque,
autopct="%1.1f%%",
startangle=90,
pctdistance=0.85,
textprops={"fontsize": 11}
)
# Adicionando círculo central para criar gráfico de rosca
centro = plt.Circle((0, 0), 0.55, fc="white")
plt.gca().add_artist(centro)
plt.title("Linguagens Mais Usadas - 2025", fontsize=14, pad=20)
plt.tight_layout()
plt.show()
Gráfico de dispersão (scatter plot)
Ideal para visualizar relação entre duas variáveis numéricas:
import matplotlib.pyplot as plt
import random
random.seed(42)
horas_estudo = [random.uniform(1, 10) for _ in range(50)]
notas = [min(10, h * 0.8 + random.uniform(-1, 1.5)) for h in horas_estudo]
plt.figure(figsize=(10, 6))
plt.scatter(horas_estudo, notas, c=notas, cmap="RdYlGn", s=80, edgecolors="gray", alpha=0.8)
plt.colorbar(label="Nota")
plt.title("Relação entre Horas de Estudo e Nota", fontsize=14)
plt.xlabel("Horas de Estudo por Dia")
plt.ylabel("Nota Final")
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
Subplots: múltiplos gráficos
Frequentemente, você precisa apresentar vários gráficos juntos para contar uma história completa:
import matplotlib.pyplot as plt
meses = ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun"]
receita = [45000, 52000, 48000, 61000, 55000, 67000]
despesa = [32000, 35000, 31000, 38000, 34000, 41000]
lucro = [r - d for r, d in zip(receita, despesa)]
clientes = [120, 145, 132, 168, 155, 190]
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
fig.suptitle("Dashboard Financeiro - 1o Semestre 2025", fontsize=16)
# Gráfico 1: Receita e Despesa
axes[0, 0].plot(meses, receita, "o-", label="Receita", color="#2ecc71")
axes[0, 0].plot(meses, despesa, "s-", label="Despesa", color="#e74c3c")
axes[0, 0].set_title("Receita vs Despesa")
axes[0, 0].legend()
axes[0, 0].grid(alpha=0.3)
# Gráfico 2: Lucro
cores_lucro = ["#2ecc71" if l > 0 else "#e74c3c" for l in lucro]
axes[0, 1].bar(meses, lucro, color=cores_lucro)
axes[0, 1].set_title("Lucro Mensal")
axes[0, 1].grid(axis="y", alpha=0.3)
# Gráfico 3: Crescimento de clientes
axes[1, 0].fill_between(meses, clientes, alpha=0.3, color="#3498db")
axes[1, 0].plot(meses, clientes, "o-", color="#3498db")
axes[1, 0].set_title("Novos Clientes")
axes[1, 0].grid(alpha=0.3)
# Gráfico 4: Composição da receita (pizza)
categorias = ["Produto A", "Produto B", "Serviços", "Outros"]
valores = [40, 25, 25, 10]
axes[1, 1].pie(valores, labels=categorias, autopct="%1.0f%%",
colors=["#3498db", "#2ecc71", "#f39c12", "#95a5a6"])
axes[1, 1].set_title("Composição da Receita")
plt.tight_layout()
plt.savefig("dashboard.png", dpi=150, bbox_inches="tight")
plt.show()
Personalizando estilos
O Matplotlib oferece estilos predefinidos que mudam toda a aparência dos gráficos:
import matplotlib.pyplot as plt
# Listando estilos disponíveis
print(plt.style.available)
# Aplicando um estilo
plt.style.use("seaborn-v0_8-whitegrid")
# Ou definindo configurações globais
plt.rcParams.update({
"font.size": 12,
"axes.titlesize": 14,
"axes.labelsize": 12,
"figure.figsize": (10, 6),
"figure.dpi": 100,
})
dados = [1, 3, 2, 5, 4, 7, 6, 8]
plt.plot(dados, "o-", color="#2c3e50")
plt.title("Gráfico com Estilo Personalizado")
plt.xlabel("Período")
plt.ylabel("Valor")
plt.show()
Boas práticas de visualização
Para criar gráficos eficazes e profissionais:
- Escolha o tipo certo: linhas para tendências temporais, barras para comparações, pizza para composição e dispersão para correlações.
- Não sobrecarregue: evite mais de 5-6 séries de dados em um mesmo gráfico.
- Use cores com propósito: cores devem ajudar a distinguir categorias, não apenas decorar.
- Inclua rótulos claros: título, eixos e legendas são essenciais para a compreensão.
- Ajuste o tamanho: use
figsizeadequado para o contexto final (relatório, apresentação ou dashboard). - Exporte em alta resolução: use
dpi=150ou superior ao salvar para impressão.
Conclusão
Matplotlib é uma ferramenta poderosa e flexível para visualização de dados em Python. Com os fundamentos apresentados neste artigo, você consegue criar desde gráficos simples até dashboards completos com múltiplos painéis. A biblioteca oferece controle total sobre cada elemento visual, permitindo criar visualizações profissionais.
Como próximos passos, explore a biblioteca Seaborn, que é construída sobre o Matplotlib e oferece gráficos estatísticos mais sofisticados com menos código. Também vale aprender Plotly para gráficos interativos em aplicações web.
Equipe Python Brasil
Contribuidor do Python Brasil — Aprenda Python em Português