使用三个列表在python中绘制3d
我按照这个来绘制3D图形。 我的问题是我已经有了3张X,Y,Z的列表 X.形(n,),Y.形(n,),Z.形(n,) 如何将这些列表传递到使用三个列表在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
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)