python - matplotlib 中的曲面图

我有一个 3 元组列表,表示 3D 空间中的一组点。我想绘制一个覆盖所有这些点的曲面。

mplot3d 包中的 plot_surface 函数要求参数 X、Y 和 Z 为二维数组。 plot_surface 是绘制表面的正确函数吗?如何将数据转换为所需的格式?

data = [(x1,y1,z1),(x2,y2,z2),.....,(xn,yn,zn)]

最佳答案

对于表面,它与 3 元组列表有点不同,您应该在 2d 数组中为域传递一个网格。

如果你只有一个 3d 点列表,而不是某个函数 f(x, y) -> z,那么你就会遇到问题,因为有多种方法可以对 3d 进行三角测量点云到表面。

这是一个光滑表面的例子:

import numpy as np
from mpl_toolkits.mplot3d import Axes3D  
# Axes3D import has side effects, it enables using projection='3d' in add_subplot
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()

https://stackoverflow.com/questions/9170838/

相关文章:

python - 使用 pandas GroupBy.agg() 对同一列进行多个聚合

python - 如何在 Tesseract 和 OpenCV 之间进行选择?

python - 如何使用 Pandas 创建随机整数的 DataFrame?

python - 如何从具有透明背景的 matplotlib 导出绘图?

python - Python中numpy.random和random.random的区别

python - 生成没有相邻相等元素的列表的所有排列

python - 断言 numpy.array 相等性的最佳方法?

python - Python 多处理模块的 .join() 方法到底在做什么?

python - NumPy:同时 max() 和 min() 的函数

python - Python字典中的线程安全