Laboratório de Programação — Ciência da Computação • UFPI
Figuras & Eixos, Pyplot, NumPy/Pandas, personalização, subplots e gráficos 2D comuns — com syntax highlighting
pip install matplotlib numpy pandas
Conteúdo alinhado ao material do curso (UFPI).
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
fig, ax = plt.subplots(figsize=(6, 3)) # cria Figure e Axes
ax.plot(x, y, label="sen(x)")
ax.set_title("Seno simples")
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.legend()
plt.show()
set_xlabel, set_ylabel, set_titleset_xlim, set_ylimlegend()grid(True)fig, ax = plt.subplots()
ax.plot(x, np.cos(x))
ax.set_xlim(0, 10) # limites do eixo x
ax.set_ylim(-1, 1) # limites do eixo y
ax.grid(True)
plt.show()
fig, ax = plt.subplots()
ax.plot(x, np.sin(x) * np.exp(-0.2*x))
ax.set_xlabel("Tempo (s)")
ax.set_ylabel("Amplitude")
ax.set_title("Sinal amortecido")
plt.show()
plot (linhas)x = np.linspace(-2, 2, 200)
y1 = 2*x + 1 # reta
y2 = x**2 - 1 # 2º grau
y3 = 0.5*x**3 - 0.2*x # 3º grau
fig, ax = plt.subplots()
ax.plot(x, y1, label="reta", color="black", linestyle="--")
ax.plot(x, y2, label="quadrática", color="tab:blue")
ax.plot(x, y3, label="cúbica", color="tab:orange")
ax.legend(); ax.grid(True)
plt.show()
fig, axs = plt.subplots(1, 3, figsize=(10, 3), sharex=True)
axs[0].plot(x, y1); axs[0].set_title("Reta")
axs[1].plot(x, y2); axs[1].set_title("Quadrática")
axs[2].plot(x, y3); axs[2].set_title("Cúbica")
for ax in axs: ax.grid(True)
fig.suptitle("Comparação de funções")
fig.tight_layout()
plt.show()
Útil para comparar múltiplos conjuntos de dados.
categorias = ["A", "B", "C", "D"]
valores = [12, 7, 15, 9]
fig, ax = plt.subplots()
ax.bar(categorias, valores, color="tab:green")
ax.set_title("Barras")
ax.set_ylabel("Valor")
for i, v in enumerate(valores):
ax.text(i, v + .3, str(v), ha="center")
plt.show()
labels = ["Maçã", "Banana", "Laranja", "Uva"]
sizes = [30, 25, 25, 20]
fig, ax = plt.subplots()
ax.pie(sizes, labels=labels, autopct="%1.1f%%", startangle=90)
ax.axis("equal") # deixa circular
ax.set_title("Preferências")
plt.show()
rng = np.random.default_rng(42)
x = rng.normal(loc=50, scale=10, size=200)
y = 0.8*x + rng.normal(scale=5, size=200)
fig, ax = plt.subplots()
ax.scatter(x, y, alpha=0.7, edgecolor="k")
ax.set_title("Correlação aproximada")
ax.set_xlabel("X"); ax.set_ylabel("Y")
plt.show()
data = rng.normal(loc=0, scale=1, size=1000)
fig, ax = plt.subplots()
ax.hist(data, bins=30, color="tab:purple", alpha=0.8)
ax.set_title("Distribuição Normal")
ax.set_xlabel("Valor"); ax.set_ylabel("Frequência")
plt.show()
dados = [rng.normal(0, 1, 200),
rng.normal(1, 1.5, 200),
rng.normal(-1, 0.5, 200)]
fig, ax = plt.subplots()
ax.boxplot(dados, labels=["A", "B", "C"], notch=True)
ax.set_title("Distribuições — Boxplot")
plt.show()
Resumo robusto: mediana, quartis e possíveis outliers.
.csv (Pandas)import pandas as pd
df = pd.read_csv("vendas.csv") # colunas: categoria, total
fig, ax = plt.subplots()
ax.bar(df["categoria"], df["total"], color="tab:blue")
ax.set_title("Vendas por categoria")
ax.set_ylabel("Total")
plt.show()
fig, ax = plt.subplots()
ordenado = df.sort_values("total")
ax.barh(ordenado["categoria"], ordenado["total"], color="tab:orange")
ax.set_title("Vendas (ordem crescente)")
ax.set_xlabel("Total")
plt.show()
plt.style.use("seaborn-v0_8") # aplica estilo global
fig, ax = plt.subplots()
ax.plot(np.linspace(0,1,50), np.linspace(0,1,50)**2)
fig.tight_layout() # ajusta espaçamentos
plt.show()
fig, ax = plt.subplots()
ax.plot([0,1,2], [2,1,3])
fig.savefig("grafico.png", dpi=300, bbox_inches="tight")
fig.savefig("grafico.pdf")
class GraficoLinha:
def __init__(self, x, y, titulo="Linha"):
self.x, self.y, self.titulo = x, y, titulo
def plot(self):
fig, ax = plt.subplots()
ax.plot(self.x, self.y)
ax.set_title(self.titulo)
ax.grid(True); plt.show()
# Uso
g = GraficoLinha(np.arange(0, 5), np.arange(0, 5)**2, "Quadrática")
g.plot()
Padrão inspirado no material: organizar gráficos via classes auxiliares.
bbox_inches="tight".