我按照link绘制了3D图。 我的问题是我已经有3个X,Y,Z列表
X.shape(n,),Y.shape(n,),Z.shape(n,)
如何将这些列表传递给surf = ax.plot_surface(X, Y, Z)
作为链接显示每个变量具有以下形状
X.shape(n,n),Y.shape(n,n),Z.shape(n,n)
如果我传递这些坐标,因为每个形状都是(n,)那么3d图形将显示为空,没有点将被绘制!
我尝试使用np.meshgrid
如下,但这种方式只能在一个平面上显示一个表面而不是3d点!
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()
答案 0 :(得分:0)
解决方案取决于数据的组织方式。
如果X
和Y
数据已经定义了网格,则可以轻松地将它们重新整形为四边形网格。 E.g。
#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
可以使用
绘制为plot_surface
ax = fig.gca(projection='3d')
ax.plot_surface(X.reshape(4,3), Y.reshape(4,3), Z.reshape(4,3))
(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)最后,可以在不使用四边形网格的情况下完全绘制曲面。这可以使用plot_trisurf
完成。
plt.plot_trisurf(X,Y,Z)
此答案是my answer for contour plots的改编版本。