使用Python绘制3D表面:引发ValueError("参数Z必须是二维的。") Matplotlib

20
我正在尝试绘制通过一组(X,Y,Z)三维点的3D曲面,但是遇到了 raise ValueError("Argument Z must be 2-dimensional.") matplotlib 错误。
points = Tail_geo(D,L) # is a list from a function 
points = points + Nose_geo(D,L)# is a list from both function s
X = [x[0] for x in points]# seperate X from the list
Y = [x[1] for x in points]
Z = [x[2] for x in points]
X = np.asarray(X)
Y = np.asarray(Y)
Z = np.asarray(Z)
fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X, Y, Z, linewidth=0, antialiased=False)
plt . show ( )

1
这段代码片段不完整,因为您没有显示函数Tail_geoNose_geo的定义并且没有显示导入。这些事情可能很重要。请显示一个完整的代码片段,以便我们可以复制粘贴然后运行。还要显示错误的完整回溯。请查看如何创建最小、完整和可验证的示例 - Rory Daulton
4
在你的代码中,Z 似乎也是一个一维列表。对于一组 XY 点,在三维表面上,您需要这些 XY 点的网格,并在每个这些 nn 的网格点上定义/计算 Z(假设 len(X) = n; len(Y) = n)。使用当前数据,您只能绘制一个三维散点图。如果需要更多信息,请分享您的代码。 - Sheldore
1个回答

36

函数plot_surface期望其输入结构化为正常的二维网格。对于您的数据(x,y,z作为列表),使用plot_trisurf函数可能更合适。只需在代码中进行简单替换即可。

surf = ax.plot_trisurf(X, Y, Z, linewidth=0, antialiased=False)

在matplotlib图库的这里有一个不错的示例 https://matplotlib.org/examples/mplot3d/trisurf3d_demo.html ,你可以浏览一下获取更多细节。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接