Heim  >  Artikel  >  Backend-Entwicklung  >  Wie erstelle ich mit Matplotlib glatte 3D-Oberflächen aus verstreuten Daten?

Wie erstelle ich mit Matplotlib glatte 3D-Oberflächen aus verstreuten Daten?

Barbara Streisand
Barbara StreisandOriginal
2024-10-26 07:11:02127Durchsuche

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

Erstellen von Oberflächendiagrammen mit Matplotlib

Anhand einer Liste von 3-Tupeln, die Punkte im 3D-Raum bezeichnen, besteht die Aufgabe darin, eine Oberfläche zu generieren, die diese Punkte abdeckt.

Die Verwendung von plot_surface aus dem mplot3d-Paket erfordert Eingabedaten in Form von 2D-Arrays für X, Y und Z. Um die gegebene Datenstruktur zu transformieren, müssen bestimmte Überlegungen angestellt werden.

Im Fall von Bei Oberflächen müssen Sie im Gegensatz zu Liniendiagrammen mithilfe von 2D-Arrays ein Gitter definieren, das die Domäne abdeckt. Wenn Sie nur mit einer Liste von 3D-Punkten arbeiten, ist die Triangulation unerlässlich. Dies liegt daran, dass es für eine bestimmte Punktwolke mehrere mögliche Triangulationen gibt.

Für eine glatte Oberfläche kann der folgende Ansatz gewählt werden:

<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>

Dieser Code definiert ein Gitter mithilfe von Meshgrid und generiert die entsprechenden Z-Werte und erstellt das Oberflächendiagramm mit plot_surface. Die resultierende Oberfläche bietet eine glatte Darstellung der zugrunde liegenden Daten.

Das obige ist der detaillierte Inhalt vonWie erstelle ich mit Matplotlib glatte 3D-Oberflächen aus verstreuten Daten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn