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

时间:2015-02-12 16:25:53

标签: matplotlib plot 3d mayavi

我有三个2d数组: X,Y,Z ,它们分别包含不规则的3d点坐标。另一个2d数组数据,其中包含那些值点。 我想要做的是在3d空间中显示这些数据,0值部分被屏蔽掉。就像这样:

enter image description here

matlab 中,我可以使用函数 fill3 来实现这一点,但是如何在 matplotlib 或<中绘制相同类型的图片? em> mayavi ?我试图一起使用 mask array,plot_surface和colorface ,例如: Plotting a masked surface plot using python, numpy and matplotlib

它有效,结果如下:

enter image description here 但这确实非常慢,并且会花费太多时间。还有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

好吧,今天我找到了解决问题的另一种方法。除了使用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)

结果是这样的:

enter image description here

这并没有真正解决问题,但这是一个很好的替代品。 我会一直等待更多的答案。