【问题标题】:How can I plot this kind of picture using Matplotlib or Mayavi?如何使用 Matplotlib 或 Mayavi 绘制这种图片?
【发布时间】:2015-02-12 16:25:52
【问题描述】:

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

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

它成功了,结果是下面的链接:

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

【问题讨论】:

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

标签: matplotlib plot 3d mayavi


【解决方案1】:

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

结果是这样的:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-21
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    相关资源
    最近更新 更多