如何使用Matplotlib或Mayavi绘制此类图片?

如何使用Matplotlib或Mayavi绘制此类图片?,matplotlib,plot,3d,mayavi,Matplotlib,Plot,3d,Mayavi,我有三个二维数组:X、Y、Z,分别包含不规则的三维点坐标。还有一个二维数组数据,其中包含这些点上的值。 我想做的是在3d空间中显示这些数据,并屏蔽掉0值部分。与此非常类似: 在matlab中,我可以使用函数fill3来实现这一点,但如何在matplotlib或mayavi中绘制相同类型的图片?我曾尝试将遮罩阵列、plot_surface和colorface一起使用,如下所示: 它成功了,结果如下: 但这确实非常缓慢,而且会花费太多时间。有更好的方法吗?好吧,今天我找到了另一种解决问题的方法

我有三个二维数组:X、Y、Z,分别包含不规则的三维点坐标。还有一个二维数组数据,其中包含这些点上的值。 我想做的是在3d空间中显示这些数据,并屏蔽掉0值部分。与此非常类似:

在matlab中,我可以使用函数fill3来实现这一点,但如何在matplotlib或mayavi中绘制相同类型的图片?我曾尝试将遮罩阵列、plot_surface和colorface一起使用,如下所示:

它成功了,结果如下:


但这确实非常缓慢,而且会花费太多时间。有更好的方法吗?

好吧,今天我找到了另一种解决问题的方法。除了使用plot_surface,我选择使用scatter3D, 核心代码是这样的
aa=np.shape(X)[0]
bb=np.形状(X)[1]
x=x.重塑(aa*bb)
y=y.重塑(aa*bb)
z=z.重塑(aa*bb)
数据=数据。重塑(aa*bb)
x1=[]
y1=[]
z1=[]
da1=[]
对于范围内的i(aa*bb):
如果数据[i]>0:
x1.追加(x[i])
y1.追加(y[i])
z1.追加(z[i])
da1.追加(数据[i])
my_cmap=cm.jet
我的cmap.set超过('c')
my_cmap.set_在('m'下)
N=da1/最大值(da1)
图=plt.图()
ax=图添加_子图(111,投影='3d')
ax.scatter3D(x1,y1,z1,s=6,alpha=0.8,marker=',,facecolors=my_cmap(N),lw=0)

结果是这样的:

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

坐标数组是不规则分布的!e、 例:X=[0.1,0.2,5,-1,-2]Y=[1,2,1.4,0,-5]Z=[10,15,9,20,13]我的强迫症迫使我竭尽全力憎恨matplotlib中那些看起来不垂直的轴。