使用三个列表在python中绘制3d

使用三个列表在python中绘制3d,python,numpy,matplotlib,mplot3d,Python,Numpy,Matplotlib,Mplot3d,我按照这个来绘制3D图形。 我的问题是我已经有了3张X,Y,Z的列表 X.形(n,),Y.形(n,),Z.形(n,) 如何将这些列表传递到surf=ax.plot_surface(X,Y,Z)as link show这些变量的形状如下 X.形(n,n),Y.形(n,n),Z.形(n,n) 如果我传递这些坐标,因为它们每一个形状都是(n,),那么3d图形将显示为空,没有点将被绘制 我尝试如下使用np.meshgrid,但这种方法将在一个平面中仅显示一个曲面,而不是三维点 X,Y,Z = np.me

我按照这个来绘制3D图形。 我的问题是我已经有了3张X,Y,Z的列表

X.形(n,),Y.形(n,),Z.形(n,)

如何将这些列表传递到
surf=ax.plot_surface(X,Y,Z)
as link show这些变量的形状如下

X.形(n,n),Y.形(n,n),Z.形(n,n)

如果我传递这些坐标,因为它们每一个形状都是(n,),那么3d图形将显示为空,没有点将被绘制

我尝试如下使用
np.meshgrid
,但这种方法将在一个平面中仅显示一个曲面,而不是三维点

X,Y,Z = np.meshgrid(X,Y,Z)

X = X[0]
Y = Y[0]
Z = Z[0]

fig = plt.figure()

ax = fig.gca(projection='3d')
ax.plot_surface(X, Y, Z)
plt.show()

解决方案将取决于数据的组织方式

规则网格上的数据 如果
X
Y
数据已经定义了网格,则可以轻松地将其重塑为四边形网格。例如

#x  y  z
 4  1  3
 6  1  8
 8  1 -9
 4  2 10
 6  2 -1
 8  2 -8
 4  3  8
 6  3 -9
 8  3  0
 4  4 -1
 6  4 -8
 8  4  8 
可以使用

任意数据 (a)如果数据不在四边形网格上,可以在网格上插值数据。matplotlib本身提供了一种方法,使用
matplotlib.mlab.griddata

import matplotlib.mlab
xi = np.linspace(4, 8, num=10)
yi = np.linspace(1, 4, num=10)
zi = matplotlib.mlab.griddata(X, Y, Z, xi, yi, interp='linear')
ax.plot_surface(xi, yi, zi)
(b)最后,无需使用四边形网格即可完全绘制曲面。这可以通过使用


这个答案是经过修改的。

您能告诉我们一些关于原始X、Y、Z数组的内容吗,也许可以对它们进行重塑以适应绘图曲面的要求。这些(4、8、10)值代表什么?为了重塑乐趣,有一个错误:值错误:新数组的总大小必须保持不变
linspace(4、8、10)
创建一个由4到8之间的10个值组成的数组。值错误告诉您,整形必须采用相同数量的总元素,就像示例中的长度为12的数组,并将其整形为4乘以3的数组。
import matplotlib.mlab
xi = np.linspace(4, 8, num=10)
yi = np.linspace(1, 4, num=10)
zi = matplotlib.mlab.griddata(X, Y, Z, xi, yi, interp='linear')
ax.plot_surface(xi, yi, zi)
plt.plot_trisurf(X,Y,Z)