Matplotlib nâng cao

Biểu đồ bề mặt 3D

Vẽ bề mặt và lưới 3D bằng projection="3d", plot_surface và view_init.

Giới thiệu

Có những dữ liệu phụ thuộc vào hai biến đầu vào, như độ cao phụ thuộc vào x và y. Một Axes 3D, tạo bằng projection="3d", có thể vẽ dữ liệu đó thành một bề mặt. view_init xoay camera để bạn nhìn từ góc đẹp nhất.

np.meshgrid biến hai dãy một chiều thành hai lưới hai chiều X và Y, nhờ đó Z được tính cho mọi cặp (x, y) cùng lúc. plot_surface tô bề mặt bằng bảng màu; plot_wireframe chỉ vẽ các đường lưới. view_init(elev, azim) đặt camera: elev là góc nhìn từ trên xuống, azim là góc xoay quanh trục đứng.

Trình mô phỏng tương tác

Xoay camera bằng elev và azim, chuyển giữa bề mặt (surface) và lưới (wireframe), thử các hàm khác.

Ví dụ Matplotlib chạy được

Matplotlib
Chạy code →
main.py
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3, 3, 40)
y = np.linspace(-3, 3, 40)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X ** 2 + Y ** 2))

fig = plt.figure(figsize=(7, 5))
ax = fig.add_subplot(projection="3d")
ax.plot_surface(X, Y, Z, cmap="viridis")
ax.view_init(elev=30, azim=45)
ax.set_title("z = sin(sqrt(x² + y²))")
plt.show()
Lấy nút Run cho ví dụ này Biểu đồ mà đoạn code này vẽ ra
Biểu đồ bề mặt 3D