如何使用 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)
结果是这样的:
这并不能真正解决问题,但它是一个不错的替代品。
我会继续等待更多答案。
我有三个二维数组: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)
结果是这样的:
这并不能真正解决问题,但它是一个不错的替代品。 我会继续等待更多答案。