Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mencipta Permukaan 3D Licin daripada Data Bersebar Menggunakan Matplotlib?

Bagaimana untuk Mencipta Permukaan 3D Licin daripada Data Bersebar Menggunakan Matplotlib?

Barbara Streisand
Barbara Streisandasal
2024-10-26 07:11:02127semak imbas

How to Create Smooth 3D Surfaces from Scattered Data Using Matplotlib?

Membuat Plot Permukaan dengan Matplotlib

Memandangkan senarai 3-tuple yang menandakan titik dalam ruang 3D, tugasnya adalah untuk menjana permukaan yang meliputi titik-titik ini.

Menggunakan plot_surface daripada pakej mplot3d memerlukan data input dalam bentuk tatasusunan 2D untuk X, Y dan Z. Untuk mengubah struktur data yang diberikan, terdapat pertimbangan tertentu yang perlu dibuat.

Dalam kes permukaan, tidak seperti plot garisan, anda perlu menentukan grid yang meliputi domain menggunakan tatasusunan 2D. Apabila bekerja dengan hanya senarai mata 3D, triangulasi menjadi penting. Ini kerana terdapat berbilang triangulasi untuk awan titik tertentu.

Untuk permukaan licin, pendekatan berikut boleh diambil:

<code class="python">import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import random

def fun(x, y):
    return x**2 + y

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = y = np.arange(-3.0, 3.0, 0.05)
X, Y = np.meshgrid(x, y)
zs = np.array(fun(np.ravel(X), np.ravel(Y)))
Z = zs.reshape(X.shape)

ax.plot_surface(X, Y, Z)

ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')

plt.show()</code>

Kod ini mentakrifkan grid menggunakan meshgrid, menjana nilai Z yang sepadan, dan mencipta plot permukaan menggunakan plot_surface. Permukaan yang terhasil memberikan gambaran yang lancar bagi data asas.

Atas ialah kandungan terperinci Bagaimana untuk Mencipta Permukaan 3D Licin daripada Data Bersebar Menggunakan Matplotlib?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn