我有三个2d数组: X,Y,Z ,它们分别包含不规则的3d点坐标。另一个2d数组数据,其中包含那些值点。 我想要做的是在3d空间中显示这些数据,0值部分被屏蔽掉。就像这样:
在 matlab 中,我可以使用函数 fill3 来实现这一点,但是如何在 matplotlib 或<中绘制相同类型的图片? em> mayavi ?我试图一起使用 mask array,plot_surface和colorface ,例如: Plotting a masked surface plot using python, numpy and matplotlib
它有效,结果如下:
但这确实非常慢,并且会花费太多时间。还有更好的方法吗?
答案 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)
结果是这样的:
这并没有真正解决问题,但这是一个很好的替代品。 我会一直等待更多的答案。