从 matplotlib 中的点坐标绘制 3D 表面

6 python matplotlib

如何在 matplotlib 中做这样的事情,但不是用点而是用表面?(我有点坐标)

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

#X = ...
#Y = ... Some coordinates points from file it is list
#Z = ...

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

ax.scatter(X, Y, Z, c='r')
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')

plt.show()
Run Code Online (Sandbox Code Playgroud)

Bas*_*sen -2

您必须使用对象plot_surface中的命令ax。我将展示我自己的绘图库中的代码片段,您只需根据需要重构它即可。然而,这个(或高度相似的)问题之前已经被问过(例如matplotlib 中的曲面图)。

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

def surface_plot(X,Y,Z,**kwargs):
    """ WRITE DOCUMENTATION
    """
    xlabel, ylabel, zlabel, title = kwargs.get('xlabel',""), kwargs.get('ylabel',""), kwargs.get('zlabel',""), kwargs.get('title',"")
    fig = plt.figure()
    fig.patch.set_facecolor('white')
    ax = fig.add_subplot(111, projection='3d')
    ax.plot_surface(X,Y,Z)
    ax.set_xlabel(xlabel)
    ax.set_ylabel(ylabel)
    ax.set_zlabel(zlabel)
    ax.set_title(title)
    plt.show()
    plt.close()
Run Code Online (Sandbox Code Playgroud)

PS:最近这个答案遭到了一连串的否决。因此,我要补充一点,原来的问题表述得很糟糕,这个答案正是OP根据与OP的私人对话所想要的。

  • 抛出错误:“参数 Z 必须是二维的” (13认同)
  • 我支持投反对票。该问题要求基于坐标的解决方案,其接口与“scatter”函数相同。@BasJansen,您只是提供了一种调用“plot_surface”的奇特方式,这不是同一回事 (5认同)
  • @BasJansen因为在你的答案中你假设每对 (x_i, y_j) 都持有一个相应的 Z 值,这意味着 Z 是一个二维数组。虽然问题是“来自点坐标”,这意味着 Z 根本没有二维数组...... (3认同)
  • @BasJansen当然应该有一个Z。重点是坐标(X,Y)可能不是网格,在这种情况下你有一个Nx3数组,其中N(x,y,z)坐标,并且Z不是一个二维数组——这就是最初的问题…… (2认同)