Maison  >  Article  >  développement back-end  >  Comment créer des surfaces 3D lisses à partir de données dispersées à l'aide de Matplotlib ?

Comment créer des surfaces 3D lisses à partir de données dispersées à l'aide de Matplotlib ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-26 07:11:02127parcourir

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

Création de tracés de surface avec Matplotlib

Considérant une liste de 3 tuples désignant des points dans l'espace 3D, la tâche est de générer une surface couvrant ces points.

L'utilisation de plot_surface du package mplot3d nécessite des données d'entrée sous la forme de tableaux 2D pour X, Y et Z. Pour transformer la structure de données donnée, il y a certaines considérations à prendre en compte.

Dans le cas de Les surfaces, contrairement aux tracés linéaires, vous devez définir une grille couvrant le domaine à l'aide de tableaux 2D. Lorsqu’on travaille uniquement avec une liste de points 3D, la triangulation devient essentielle. En effet, il existe plusieurs triangulations possibles pour un nuage de points donné.

Pour une surface lisse, l'approche suivante peut être adoptée :

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

Ce code définit une grille à l'aide de meshgrid, génère les valeurs Z correspondantes et crée le tracé de surface à l'aide de plot_surface. La surface résultante fournit une représentation fluide des données sous-jacentes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn