Pandas & NumPy Academy · Aula

Gráficos de linhas e dispersão

Represente dados contínuos com ax.plot() e pontos discretos com ax.scatter(), controlando a cor, o marcador e o estilo da linha.

Aula 2 de 413 etapas

Gráficos de linhas e dispersão é uma aula grátis de Pandas & NumPy Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Pandas & NumPy Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Pandas & NumPy Academy inclui 4 aulas no total.

Linhas e dispersão: tipos fundamentais de gráficos

Gráficos de linhas conectam pontos de dados sequenciais com uma linha e são ideais para visualizar tendências ao longo do tempo ou funções contínuas. Gráficos de dispersão desenham pontos individuais sem conectá-los, sendo perfeitos para explorar relações entre duas variáveis numéricas. Ambos são criados em um objeto Axes do Matplotlib: ax.plot() para linhas e ax.scatter() para pontos de dispersão.

ax.plot() para gráficos de linhas

ax.plot(x, y) desenha uma linha conectando os pontos de dados na ordem em que aparecem. Passe os valores de x como primeiro argumento e os valores de y como segundo. Ambos podem ser listas Python, vetores NumPy ou séries do Pandas. Quando apenas um argumento é passado, o Matplotlib usa automaticamente o índice (0, 1, 2, ...) como eixo x. O método retorna uma lista de objetos Artist Line2D.

import matplotlib.pyplot as plt
import numpy as np

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

fig, ax = plt.subplots(figsize=(7, 4))
ax.plot(x, y)  # basic line plot
ax.set_title('Sine Wave')
ax.set_xlabel('x')
ax.set_ylabel('sin(x)')
# plt.show()
plt.close()

Controlando o estilo e a cor das linhas

Os argumentos nomeados mais comuns de ax.plot() são: color (nome, hexadecimal ou tupla RGB), linewidth (ou lw), linestyle (ou ls): '-' contínuo, '--' tracejado, ':' pontilhado, '-.' traço-ponto, marker (forma em cada ponto de dados) e markersize. Combine linestyle e marker para exibir simultaneamente a linha e os pontos de dados individuais.

fig, ax = plt.subplots(figsize=(7, 4))

# Solid blue line with circle markers
ax.plot(x, np.sin(x), color='steelblue', lw=2, ls='-',
        marker='o', markersize=4, label='sin(x)')

# Dashed red line
ax.plot(x, np.cos(x), color='crimson', lw=1.5, ls='--', label='cos(x)')

ax.legend()
plt.close()

Plotando várias linhas

Chame ax.plot() várias vezes para sobrepor diversas linhas no mesmo Eixo. O Matplotlib alterna automaticamente entre as cores de uma paleta padrão. Sempre passe o argumento nomeado label para cada linha, para que ax.legend() possa identificá-las automaticamente. Faça a chamada da legenda depois de todas as chamadas de plotagem para garantir que todas as linhas sejam incluídas.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(0)
dates = pd.date_range('2024-01', periods=12, freq='ME')
fig, ax = plt.subplots(figsize=(8, 4))

for product in ['A', 'B', 'C']:
    sales = np.random.randint(50, 200, 12)
    ax.plot(dates, sales, marker='o', label=f'Product {product}')

ax.set_title('Monthly Sales by Product')
ax.legend()
plt.close()

Plotando DataFrames do Pandas diretamente

Os DataFrames do Pandas têm um método .plot() que cria gráficos do Matplotlib diretamente. Passe ax=ax para desenhar em um objeto Eixo existente. df.plot(ax=ax) plota todas as colunas como linhas separadas, usando o índice do DataFrame como eixo x. Depois, ainda é possível aplicar todas as personalizações do Matplotlib ao objeto ax.

df = pd.DataFrame(
    np.random.randn(12, 3),
    index=pd.date_range('2024', periods=12, freq='ME'),
    columns=['North', 'South', 'West']
).cumsum()

fig, ax = plt.subplots(figsize=(8, 4))
df.plot(ax=ax, linewidth=1.5)
ax.set_title('Cumulative Revenue by Region')
ax.set_ylabel('Revenue (cumulative)')
plt.close()

ax.scatter() para gráficos de dispersão

ax.scatter(x, y) desenha pontos individuais sem conectá-los. Diferentemente de ax.plot(), scatter não pressupõe que os dados estejam ordenados. Parâmetros importantes: c (cor, que pode ser um vetor para definir a cor de cada ponto), s (tamanho do ponto, que também pode ser um vetor), cmap (mapa de cores usado quando c é numérico) e alpha (transparência de 0 a 1 para lidar com a sobreposição de pontos).

np.random.seed(42)
x = np.random.randn(100)
y = 2 * x + np.random.randn(100)

fig, ax = plt.subplots(figsize=(6, 5))
ax.scatter(x, y, color='steelblue', alpha=0.6, s=40)
ax.set_xlabel('Feature X')
ax.set_ylabel('Target Y')
ax.set_title('Feature vs Target')
plt.close()

Colorindo pontos de dispersão por categoria

Passe um vetor numérico ao parâmetro c e um mapa de cores cmap para colorir os pontos de dispersão de acordo com uma terceira variável. Adicione uma barra de cores com plt.colorbar(scatter_obj) para fornecer uma escala. Essa técnica é chamada de variante de gráfico de bolhas quando o parâmetro s (tamanho) também varia de acordo com uma quarta variável.

categories = np.random.choice([0, 1, 2], size=100)

fig, ax = plt.subplots(figsize=(6, 5))
scatter = ax.scatter(x, y, c=categories, cmap='Set1',
                     alpha=0.7, s=60, edgecolors='none')
fig.colorbar(scatter, ax=ax, label='Category')
ax.set_title('Scatter Coloured by Category')
plt.close()

Adicionando uma linha de tendência

Um gráfico de dispersão com uma linha de tendência ajustada comunica tanto os pontos de dados individuais quanto o padrão geral. Use np.polyfit(x, y, 1) para calcular um ajuste linear, avalie-o com np.poly1d(coeffs)(x_range) e sobreponha o resultado com ax.plot() sobre a dispersão. A linha de tendência deve ser mais fina e ter um estilo diferente para distingui-la dos pontos de dados.

fig, ax = plt.subplots(figsize=(6, 5))
ax.scatter(x, y, alpha=0.4, s=30, color='steelblue', label='Data')

# Fit and plot linear trend line
coeffs = np.polyfit(x, y, 1)
x_line = np.linspace(x.min(), x.max(), 100)
y_line = np.poly1d(coeffs)(x_line)
ax.plot(x_line, y_line, color='red', lw=2, label='Linear fit')

ax.legend()
ax.set_title('Scatter with Trend Line')
plt.close()

Sombreando bandas de confiança com fill_between

ax.fill_between(x, y_lower, y_upper) preenche a área entre duas curvas. Isso é usado com frequência para mostrar intervalos de confiança em torno de uma linha média, bandas de desvio padrão ou limites de mínimo e máximo. Passe alpha para tornar o sombreado semitransparente, mantendo os dados subjacentes visíveis.

x_range = np.linspace(0, 2 * np.pi, 100)
mean = np.sin(x_range)
upper = mean + 0.2
lower = mean - 0.2

fig, ax = plt.subplots(figsize=(7, 4))
ax.plot(x_range, mean, color='steelblue', lw=2, label='Mean')
ax.fill_between(x_range, lower, upper,
                color='steelblue', alpha=0.2, label='±0.2 band')
ax.legend()
ax.set_title('Line with Confidence Band')
plt.close()

Limites dos eixos e linhas de grade

Controle o intervalo visível com ax.set_xlim(min, max) e ax.set_ylim(min, max). Ative as linhas de grade com ax.grid(True). Personalize a grade com os argumentos nomeados linestyle, linewidth e alpha. Uma grade discreta com alpha=0.3 facilita a leitura de valores exatos sem poluir o gráfico. Chame ax.set_axisbelow(True) para desenhar a grade atrás dos pontos de dados.

fig, ax = plt.subplots(figsize=(7, 4))
ax.plot(x, np.sin(x), 'b-', lw=2)

ax.set_xlim(0, 2 * np.pi)
ax.set_ylim(-1.2, 1.2)
ax.grid(True, linestyle='--', alpha=0.5)
ax.set_axisbelow(True)  # grid behind data
ax.set_title('Sine with Grid')
plt.close()

Alpha e sobreposição de pontos

Quando muitos pontos de dados se sobrepõem na mesma região de um gráfico de dispersão, os pontos individuais ficam invisíveis — isso é chamado de sobreposição de pontos. A solução mais simples é reduzir a opacidade com alpha (0.0 = totalmente transparente, 1.0 = totalmente opaco). Defina alpha=0.3 ou menos para que as regiões densas fiquem mais escuras (porque vários pontos semitransparentes se acumulam), enquanto as regiões esparsas permanecem claras. Para conjuntos de dados muito grandes (milhões de pontos), considere usar hexbin ou estimativas de densidade por núcleo.

np.random.seed(1)
x_dense = np.random.randn(1000)
y_dense = np.random.randn(1000)

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4))

# Without alpha: overplotting hides density
ax1.scatter(x_dense, y_dense, s=10)
ax1.set_title('No alpha (overplotted)')

# With alpha: density visible
ax2.scatter(x_dense, y_dense, s=10, alpha=0.2)
ax2.set_title('alpha=0.2 (density visible)')

plt.tight_layout()
plt.close()

Verificação rápida

Teste sua compreensão dos gráficos de linhas e de dispersão do Matplotlib apresentados nesta lição.

Recapitulação da lição

Nesta lição, o(a senhor(a) aprendeu que ax.plot() cria gráficos de linhas com controle completo sobre a cor, o estilo da linha e os marcadores; ax.scatter() cria gráficos de dispersão com cor e tamanho individuais por ponto usando c e s; ax.fill_between() adiciona bandas de confiança; e ax.grid() adiciona linhas de grade para facilitar a leitura. A seguir, criaremos gráficos de barras e histogramas para visualizar dados categóricos e distribuições.

Grátis para começar

Aprenda Python com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
30
Aulas
120

Perguntas Frequentes

A aula “Gráficos de linhas e dispersão” é grátis?

Sim — o texto completo de “Gráficos de linhas e dispersão” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Pandas & NumPy Academy, atualize para CoddyKit PRO. O curso de Pandas & NumPy Academy inclui 4 aulas no total.

O que vou aprender em “Gráficos de linhas e dispersão”?

Represente dados contínuos com ax.plot() e pontos discretos com ax.scatter(), controlando a cor, o marcador e o estilo da linha. Você pratica Pandas & NumPy Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Pandas & NumPy Academy?

Nenhuma experiência prévia é necessária. Pandas & NumPy Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Gráficos de linhas e dispersão”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Pandas & NumPy Academy?

Sim. Cada aula de Pandas & NumPy Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Arquitetura de Figure e Axes
  2. Gráficos de linhas e dispersão
  3. Gráficos de barras e histogramas
  4. Rótulos, títulos e salvamento de gráficos
← Voltar para Pandas & NumPy Academy