Python - Gráficos com Matplotlib
A biblioteca matplotlib é usada para construir gráficos em Python. Neste material, ela será útil para visualizar funções, pontos de interpolação, ajustes de regressão, áreas aproximadas por integração e soluções numéricas de equações diferenciais.
O uso mais comum é importar o módulo pyplot com o apelido plt. Em geral, combinamos NumPy para gerar os pontos e Matplotlib para desenhar o gráfico.
Plotagem 2D
A plotagem 2D é usada quando queremos representar pares ordenados \((x,y)\). Ela aparece em gráficos de funções reais, pontos de interpolação, curvas ajustadas por regressão e soluções aproximadas de EDOs do tipo \(y(x)\).
import numpy as np
import matplotlib.pyplot as plt
def f(x):
return x**2 - 4
x = np.linspace(-3, 3, 100)
y = f(x)
plt.plot(x, y)
plt.axhline(0, color="black", linewidth=0.8)
plt.grid(True)
plt.show()
No exemplo, np.linspace(-3, 3, 100) cria 100 pontos no intervalo \([-3,3]\). Quanto maior a quantidade de pontos, mais suave será a curva desenhada.
| Comando | Função no gráfico 2D |
|---|---|
plt.plot(x, y) |
Desenha uma curva ligando os pontos \((x_i,y_i)\) |
plt.scatter(x, y) |
Desenha pontos sem ligá-los por linhas |
plt.grid(True) |
Mostra a grade do plano cartesiano |
plt.show() |
Exibe a figura na tela |
plt.savefig("grafico.png") |
Salva a figura em um arquivo de imagem |
Gráfico com pontos e legenda
Em interpolação e regressão, é comum comparar pontos observados com uma curva calculada. Para isso, podemos desenhar os pontos com scatter e a curva com plot:
import numpy as np
import matplotlib.pyplot as plt
x_dados = np.array([0, 1, 2, 3], dtype=float)
y_dados = np.array([1, 2.8, 5.2, 10.1], dtype=float)
def modelo(x):
return x**2 + 1
x = np.linspace(0, 3, 100)
y = modelo(x)
plt.scatter(x_dados, y_dados, label="Dados")
plt.plot(x, y, label="Modelo")
plt.xlabel("x")
plt.ylabel("y")
plt.title("Comparação entre dados e modelo")
plt.legend()
plt.grid(True)
plt.show()
Os comandos xlabel, ylabel, title e legend tornam o gráfico mais legível. Eles devem ser usados sempre que o gráfico for apresentado como resultado de um método numérico.
Plotagem 3D
A plotagem 3D é usada quando cada ponto depende de três coordenadas, como \((x,y,z)\), ou quando queremos visualizar uma superfície \(z=f(x,y)\). Esse tipo de gráfico é útil para interpretar funções de duas variáveis, superfícies de erro e trajetórias espaciais.
Para desenhar uma superfície, primeiro criamos uma malha de pontos no plano \(xy\) com np.meshgrid. Depois calculamos \(z\) em cada ponto dessa malha:
import numpy as np
import matplotlib.pyplot as plt
def f(x, y):
return x**2 + y**2
x = np.linspace(-2, 2, 50)
y = np.linspace(-2, 2, 50)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
fig = plt.figure()
ax = fig.add_subplot(projection="3d")
ax.plot_surface(X, Y, Z, cmap="viridis")
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_zlabel("z")
ax.set_title("Superfície z = x² + y²")
plt.show()
Nesse exemplo, X e Y guardam as coordenadas da malha, e Z guarda o valor da função em cada ponto. O comando plot_surface desenha a superfície correspondente.
| Comando | Função no gráfico 3D |
|---|---|
np.meshgrid(x, y) |
Cria uma malha de pontos no plano \(xy\) |
fig.add_subplot(projection="3d") |
Cria um eixo tridimensional |
ax.plot_surface(X, Y, Z) |
Desenha uma superfície |
ax.plot3D(x, y, z) |
Desenha uma curva no espaço |
ax.scatter(x, y, z) |
Desenha pontos tridimensionais |
Atividade
Construa um gráfico 2D para \(f(x)=x^2+1\) no intervalo \([0,2]\). Depois, construa uma superfície 3D para \(z=x^2+y^2\) usando np.meshgrid e plot_surface.