如何使用 Matplotlib 或 Mayavi 绘制这种图片?

How can I plot this kind of picture using Matplotlib or Mayavi?

我有三个二维数组:X,Y,Z,其中包含不规则的 3d 点坐标,respectively.And 另一个二维数组 data,其中包含这些点的值。 我想要做的是在 3d space 中显示此数据,0 值部分被屏蔽 out.Much 像这样:

matlab中可以用函数fill3来实现,但是如何在matplotlib 还是 mayavi?我试过一起使用 mask array ,plot_surface 和 colorface ,例如这里: Plotting a masked surface plot using python, numpy and matplotlib

成功了,结果是下面的link:

但这 真的很慢,而且会花费太多时间 。有没有更好的方法?

嗯,今天我找到了解决问题的替代方法。除了使用plot_surface,我选择使用scatter3D, 核心代码是这样的 aa=np.shape(X)[0] bb=np.shape(X)[1] x=X.reshape(aa*bb) y=Y.reshape(aa*bb) z=Z.reshape(aa*bb) data=data.reshape(aa*bb) x1=[] y1=[] z1=[] da1=[] for i in range(aa*bb): if data[i]>0: x1.append(x[i]) y1.append(y[i]) z1.append(z[i]) da1.append(data[i]) my_cmap=cm.jet my_cmap.set_over('c') my_cmap.set_under('m') N=da1/max(da1) fig=plt.figure() ax=fig.add_subplot(111,projection='3d') ax.scatter3D(x1,y1,z1,s=6,alpha=0.8,marker=',',facecolors=my_cmap(N),lw=0)

结果是这样的:

这并不能真正解决问题,但它是一个不错的替代品。 我会继续等待更多答案。