Python Matplotlib Seaborn explicado de forma simples (com diagramas e código real)

Python Matplotlib Seaborn: o essencial em um artigo — código real, diagramas e etapas concretas, extratos de um curso de 37 lições.

Python Matplotlib Seaborn explicado de forma simples (com diagramas e código real)

Um guia direto ao ponto: Python Matplotlib Seaborn dissecado com diagramas, exemplos concretos e comandos testados. Tudo vem de um curso estruturado de 11 capítulos — aqui está o melhor.

tl;dr
  • Introdução e Instalação
  • Bases do Matplotlib
  • Gráficos essenciais do Matplotlib
  • Personalização e estilos
  • Subplots e figuras complexas
~$ cat ./parcours.md # Python Matplotlib Seaborn — 10 capítulos
01
Introdução e Instalação
→ Apresentação do curso→ Instalar Python, Anaconda, Jupyter e as bibliotecas+ 1 mais lições
02
Bases do Matplotlib
→ Anatomia de uma figura Matplotlib→ Pyplot vs API orientada a objetos+ 1 mais lições
03
Gráficos essenciais Matplotlib
→ Gráficos de linhas (line charts)→ Diagramas de barras (bar charts)+ 2 mais lições
04
Personalização e estilos
→ Cores, marcadores e estilos de linhas→ Títulos, legendas, anotações e texto+ 1 mais lições
05
Subplots e figuras complexas
→ Subplots com plt.subplots()→ GridSpec para layouts assimétricos+ 1 mais lições
06
Introdução ao Seaborn
→ O que é Seaborn e em que difere do Matplotlib?→ Instalar Seaborn e carregar os datasets integrados+ 1 mais lições
07
Visualizações estatísticas Seaborn
→ Distribuições com histplot, kdeplot e displot→ Boxplot, violinplot e stripplot+ 2 mais lições
08
Visualizações multivariadas Seaborn
→ pairplot e matrizes de correlação→ heatmap — mapas de calor+ 1 mais lições
🏁
Projeto final (+ 2 capítulos no caminho)
→ Você sai com um projeto concreto e demonstrável

Exploração e visualizações iniciais (EDA)

NOTEObjetivo — Realizar a exploração dos dados (EDA) do dataset de vendas para identificar os insights principais a destacar no dashboard final.

Por que fazer uma EDA antes do dashboard?

TIPRegra de ouro — Nunca se projeta um dashboard sem antes ter compreendido os dados. A EDA revela os padrões, os outliers e os insights que deverão ser destacados.

Nesta lição, vamos criar 5 gráficos exploratórios para entender:

Setup comum

output
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

sns.set_theme(
    style="whitegrid",
    context="notebook",
    palette="viridis",
    font_scale=1.05,
)

df = pd.read_csv("ventes_2024.csv", parse_dates=["date"])
print(df.info())
print(df.describe())

Gráfico 1 : Distribuição do ticket médio

output
fig, ax = plt.subplots(figsize=(10, 5))
sns.histplot(data=df, x="vente_eur", kde=True, bins=40, color="#7c3aed", ax=ax)

mean_vente = df["vente_eur"].mean()
median_vente = df["vente_eur"].median()
ax.axvline(mean_vente, color="red", linestyle="--", linewidth=2, label=f"Moyenne : {mean_vente:.0f} EUR")
ax.axvline(median_vente, color="orange", linestyle="--", linewidth=2, label=f"Mediane : {median_vente:.0f} EUR")

ax.set_title("Distribution du panier moyen", fontweight="bold")
ax.set_xlabel("Montant de la commande (EUR)")
ax.set_ylabel("Nombre de transactions")
ax.legend()
sns.despine()
plt.tight_layout()
plt.show()
TIPInsight EDA #1 — A distribuição é assimétrica à direita (skewed right). A média é puxada por alguns pedidos muito grandes, enquanto a mediana reflete melhor o comportamento « típico ».

Gráfico 2 : Evolução mensal do faturamento

output
monthly = df.groupby("mois").agg(
    ca=("vente_eur", "sum"),
    nb_cmd=("vente_eur", "count"),
).reset_index()

fig, ax = plt.subplots(figsize=(11, 5))
sns.lineplot(data=monthly, x="mois", y="ca", marker="o", linewidth=2.5, color="#7c3aed", ax=ax)
ax.fill_between(monthly["mois"], monthly["ca"], alpha=0.15, color="#7c3aed")

best_month = monthly.loc[monthly["ca"].idxmax()]
ax.annotate(
    f"Pic : {best_month['ca']:,.0f} EUR",
    xy=(best_month["mois"], best_month["ca"]),
    xytext=(best_month["mois"], best_month["ca"] + 1500),
    ha="center", fontsize=11, fontweight="bold", color="red",
    arrowprops=dict(arrowstyle="->", color="red")
)

ax.set_title("Evolution mensuelle du chiffre d'affaires 2024", fontweight="bold")
ax.set_xlabel("Mois"); ax.set_ylabel("CA (EUR)")
ax.set_xticks(range(1, 13))
sns.despine()
plt.tight_layout()
plt.show()
TIPInsight EDA #2 — Pico de atividade no período festivo (novembro / dezembro); queda relativa em fevereiro-março.

Gráfico 3 : Desempenho por categoria

output
cat_perf = df.groupby("categorie").agg(
    ca=("vente_eur", "sum"),
    marge=("marge_eur", "sum"),
).reset_index().sort_values("ca", ascending=True)

fig, ax = plt.subplots(figsize=(10, 5))
y_pos = range(len(cat_perf))
ax.barh(y_pos, cat_perf["ca"], color="#a78bfa", label="CA", alpha=0.8)
ax.barh(y_pos, cat_perf["marge"], color="#7c3aed", label="Marge", alpha=0.9)

for i, (ca, marge) in enumerate(zip(cat_perf["ca"], cat_perf["marge"])):
    ax.text(ca + 2000, i, f"{ca:,.0f} EUR", va="center", fontsize=10, fontweight="bold")

ax.set_yticks(y_pos)
ax.set_yticklabels(cat_perf["categorie"])
ax.set_title("CA et marges par categorie produit", fontweight="bold")
ax.set_xlabel("Montant (EUR)")
ax.legend(loc="lower right")
sns.despine()
plt.tight_layout()
plt.show()
TIPInsight EDA #3 — Eletrônicos e vestuário geram o maior faturamento, mas a relação margem / CA varia. O segmento de esportes, mesmo com menor faturamento, pode apresentar margem relativa melhor.

Gráfico 4 : Desempenho por loja (boxplot)

output
fig, ax = plt.subplots(figsize=(11, 5))
order = df.groupby("magasin")["vente_eur"].median().sort_values(ascending=False).index

sns.boxplot(data=df, x="magasin", y="vente_eur", order=order,
            palette="viridis", hue="magasin", legend=False, ax=ax)
sns.stripplot(data=df, x="magasin", y="vente_eur", order=order,
              color="black", alpha=0.15, size=2, ax=ax)

ax.set_title("Distribution des paniers par magasin (trie par mediane)", fontweight="bold")
ax.set_xlabel("Magasin"); ax.set_ylabel("Panier (EUR)")
sns.despine()
plt.tight_layout()
plt.show()
TIPInsight EDA #4 — As lojas de Paris e Lyon apresentam tickets médios mais altos. Bordeaux exibe mais outliers para cima (grandes pedidos pontuais).

Gráfico 5 : Correlações numéricas (heatmap)

output
numeric_cols = ["vente_eur", "marge_eur", "nb_articles", "mois", "trimestre"]
corr = df[numeric_cols].corr()

fig, ax = plt.subplots(figsize=(8, 6))
sns.heatmap(corr, annot=True, fmt=".2f", cmap="vlag", center=0,
            square=True, linewidths=0.5, cbar_kws={"shrink": 0.7}, ax=ax)
ax.set_title("Matrice de correlation des variables numeriques", fontweight="bold")
plt.tight_layout()
plt.show()

Primeiro script de visualização

NOTEObjetivo — Criar seu primeiro gráfico com Matplotlib: traçar a função y = sin(x) entre 0 e 2π. Este exercício valida sua instalação e fornece uma base concreta para o restante do curso.

Objetivos pedagógicos

TIPAo final deste módulo — Você saberá escrever um script Python completo que gera dados com NumPy, os visualiza com Matplotlib e salva o resultado em imagem. Também entenderá por que sempre começamos com import numpy as np e import matplotlib.pyplot as plt.

O script completo: 8 linhas para um primeiro gráfico

Aqui está o script que vamos dissecar juntos. Copie-o em um novo notebook Jupyter:

output
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)

plt.plot(x, y)
plt.title("Ma premiere fonction sinus")
plt.xlabel("x (radians)")
plt.ylabel("sin(x)")
plt.grid(True)
plt.show()

Execute a célula (tecla Shift + Enter). Você deverá ver aparecer uma bela curva senoidal que oscila entre −1 e +1.

TIPParabéns! Você acabou de criar seu primeiro gráfico em Python. Agora vamos entender linha por linha o que está acontecendo.

Dissecção linha por linha

Linhas 1-2 : os imports

output
import numpy as np
import matplotlib.pyplot as plt

Duas convenções universais:

WARNINGRegra de ouroSempre escreva import matplotlib.pyplot as plt e nunca import matplotlib as plt. O módulo pyplot contém todas as funções plot(), title(), etc.

Linha 3 : gerar o eixo x

output
x = np.linspace(0, 2 * np.pi, 100)

np.linspace(início, fim, n) retorna um array de n valores regularmente espaçados entre início e fim. Aqui: 100 pontos entre 0 e 2π (aproximadamente 6,28).

Resultado: x = [0.0, 0.063, 0.127, 0.190, ..., 6.283]

Linha 4 : calcular y = sin(x)

output
y = np.sin(x)

NumPy aplica sin() a cada elemento do array x em uma única operação. Essa é a mágica vetorial do NumPy: sem loops, extremamente rápido.

Resultado: y = [0.0, 0.063, 0.127, ..., -0.0]

Linha 5 : traçar a curva

output
plt.plot(x, y)

plt.plot(x, y) desenha uma linha ligando cada ponto (x[i], y[i]). Essa é a função mais usada em todo o Matplotlib.

Linhas 6-8 : título, rótulos e grade

output
plt.title("Ma premiere fonction sinus")
plt.xlabel("x (radians)")
plt.ylabel("sin(x)")
plt.grid(True)

Primeiro gráfico em linha com dados reais

NOTEObjetivo — Passar de dados sintéticos (seno, cosseno) para dados reais. Carregar um arquivo CSV com Pandas, compreender a estrutura e traçar um gráfico de linha profissional.

Objetivos pedagógicos

TIPAo final deste módulo — Você saberá carregar um CSV, manipulá-lo com Pandas, traçar uma ou várias séries temporais e exportar tudo de forma limpa.

Nosso dataset: vendas mensais fictícias

Para este exercício, criamos um pequeno DataFrame com 12 meses de vendas para 3 produtos diferentes:

output
import pandas as pd
import matplotlib.pyplot as plt

data = {
    "Mois": ["Jan", "Fev", "Mar", "Avr", "Mai", "Juin",
             "Juil", "Aout", "Sep", "Oct", "Nov", "Dec"],
    "Produit A": [120, 135, 148, 160, 175, 210,
                   250, 245, 200, 170, 140, 290],
    "Produit B": [80, 85, 90, 95, 100, 110,
                   130, 135, 120, 100, 90, 180],
    "Produit C": [50, 55, 60, 70, 85, 100,
                   120, 115, 95, 75, 60, 150],
}
df = pd.DataFrame(data)
print(df.head())

Resultado exibido:

output
Mois  Produit A  Produit B  Produit C
0  Jan        120         80         50
1  Fev        135         85         55
2  Mar        148         90         60
3  Avr        160         95         70
4  Mai        175        100         85
TIPPor que um DataFrame? — Um DataFrame Pandas é uma tabela estruturada (colunas nomeadas, linhas indexadas). Esse é o formato padrão para passar dados ao Matplotlib ou Seaborn.

Traçar uma única coluna

output
fig, ax = plt.subplots(figsize=(10, 5))

ax.plot(df["Mois"], df["Produit A"], color="purple", linewidth=2)
ax.set_title("Ventes mensuelles du Produit A", fontsize=14)
ax.set_xlabel("Mois")
ax.set_ylabel("Unites vendues")
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()

Você obtém um gráfico limpo mostrando a sazonalidade das vendas (pico em julho, explosão em dezembro).

Traçar várias séries no mesmo gráfico

output
fig, ax = plt.subplots(figsize=(12, 6))

ax.plot(df["Mois"], df["Produit A"], label="Produit A", linewidth=2, marker="o")
ax.plot(df["Mois"], df["Produit B"], label="Produit B", linewidth=2, marker="s")
ax.plot(df["Mois"], df["Produit C"], label="Produit C", linewidth=2, marker="^")

ax.set_title("Ventes mensuelles par produit", fontsize=14, pad=15)
ax.set_xlabel("Mois", fontsize=12)
ax.set_ylabel("Unites vendues", fontsize=12)
ax.legend(loc="upper left", fontsize=11)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()

Três novas técnicas aplicadas:

Marcadores disponíveis

CódigoMarcadorCódigoMarcador
"o"Círculo"s"Quadrado
"^"Triângulo para cima"v"Triângulo para baixo
"<"Triângulo à esquerda">"Triângulo à direita
"D"Diamante"d"Diamante fino
"*"Estrela"+"Mais
"x"Cruz"."Ponto
"P"Mais preenchido"X"Cruz preenchida

Carregar um arquivo CSV real

Na vida real, seus dados estão em um arquivo .csv. Veja como carregá-lo:

output
# Se o arquivo estiver na mesma pasta
df = pd.read_csv("ventes.csv")

# Se o arquivo estiver na web
url = "https://raw.githubusercontent.com/exemple/data/main/ventes.csv"
df = pd.read_csv(url)

# Com outro separador (ponto e vírgula)
df = pd.read_csv("ventes.csv", sep=";")

# Com parsing automático de datas
df = pd.read_csv("ventes.csv", parse_dates=["date"])

print(df.head())
print(df.dtypes)
NOTEDica de debug — Sempre verifique df.dtypes após o carregamento. Se uma coluna que deveria ser numérica estiver como object, é porque há vírgulas decimais francesas ou células vazias a limpar.

Dica Pandas + Matplotlib: atalho integrado

O Pandas possui seu próprio wrapper para Matplotlib. Você pode plotar diretamente a partir de um DataFrame:

output
df.set_index("Mois").plot(figsize=(10, 5), marker="o")
plt.title("Ventes par produit (style Pandas)")
plt.ylabel("Unites")
plt.grid(True, alpha=0.3)
plt.show()
va-plus-loin

Este artigo cobre os trechos mais úteis — o curso completo Python Matplotlib Seaborn (11 capítulos, 37 lições, exercícios corrigidos e projeto final) leva você até o fim.

./acceder-au-cours-complet curso gratuito : Maîtriser Claude Code

FAQ

Quanto tempo leva para aprender Python Matplotlib Seaborn?
Com uma progressão estruturada (11 capítulos, 37 lições curtas e práticas), é possível atingir um nível operacional em algumas semanas dedicando 30 a 60 minutos por dia. O importante é praticar cada conceito imediatamente.
Preciso de pré-requisitos?
Básicos de informática são suficientes. Se você sabe usar um terminal e ler código simples, está pronto.
Por onde começar na prática?
Reproduza os comandos deste artigo e depois siga o curso completo Python Matplotlib Seaborn: ele encadeia as 37 lições em ordem, com exercícios e projeto final.

📬 Quer receber este tipo de guia toda semana? Inscreva-se gratuitamente — código real, zero enrolação.