Visualizar dados é tão importante quanto calculá-los. Matplotlib é a biblioteca de visualização base do Python — quase todas as outras (Seaborn, Pandas plot, Plotly) são construídas sobre ela. Aprender Matplotlib é aprender a linguagem visual do Python para dados.

Instalação e importação

pip install matplotlib
import matplotlib.pyplot as plt
import pandas as pd

Gráfico de linha

meses = ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun"]
vendas = [45000, 52000, 49000, 61000, 58000, 70000]

plt.figure(figsize=(10, 5))  # largura, altura em polegadas
plt.plot(meses, vendas, marker="o", color="#2ab76b", linewidth=2)
plt.title("Vendas Mensais 2026", fontsize=14, fontweight="bold")
plt.xlabel("Mês")
plt.ylabel("Vendas (R$)")
plt.grid(axis="y", alpha=0.3)
plt.tight_layout()
plt.savefig("vendas_mensais.png", dpi=150)
plt.show()

Gráfico de barras

regioes = ["Sul", "Norte", "Centro", "Leste"]
valores = [890000, 650000, 420000, 780000]

cores = ["#1a7a45", "#7c4dce", "#c8981a", "#1a3a6e"]

plt.figure(figsize=(8, 5))
barras = plt.bar(regioes, valores, color=cores)

# Rótulos sobre as barras:
for barra in barras:
    altura = barra.get_height()
    plt.text(barra.get_x() + barra.get_width()/2., altura,
             f"R$ {altura/1000:.0f}k", ha="center", va="bottom")

plt.title("Vendas por Região")
plt.ylabel("Vendas (R$)")
plt.tight_layout()
plt.show()

Gráfico de dispersão

import numpy as np

investimento = np.random.randint(1000, 20000, 50)
retorno = investimento * 2.5 + np.random.randint(-5000, 5000, 50)

plt.figure(figsize=(8, 5))
plt.scatter(investimento, retorno, alpha=0.6, color="#7c4dce")
plt.xlabel("Investimento (R$)")
plt.ylabel("Retorno (R$)")
plt.title("Investimento vs. Retorno")
plt.tight_layout()
plt.show()

Múltiplos gráficos com subplots

fig, axes = plt.subplots(1, 2, figsize=(12, 5))

axes[0].plot(meses, vendas, marker="o")
axes[0].set_title("Vendas por Mês")

axes[1].bar(regioes, valores)
axes[1].set_title("Vendas por Região")

plt.tight_layout()
plt.show()

Perguntas frequentes

Como salvar o gráfico em alta resolução?

Use plt.savefig("grafico.png", dpi=300, bbox_inches="tight"). dpi=300 é padrão para impressão; dpi=150 é suficiente para apresentações digitais. bbox_inches="tight" evita cortar os rótulos nas bordas.

Seaborn é melhor que Matplotlib?

Seaborn gera gráficos estatísticos mais bonitos com menos código, mas é construído sobre Matplotlib. Aprenda Matplotlib primeiro — entender a estrutura base torna Seaborn muito mais fácil de personalizar.