【问题标题】:Matplotlib hiding scatters behind voxelsMatplotlib 隐藏在体素后面的散点图
【发布时间】:2019-10-01 09:02:14
【问题描述】:

我正在尝试可视化一个 3D 参数空间,在该空间中我对带有体素的参数充满信心,并且我的估计参数带有散点图。目标是清楚地看到参数是否在这个空间内。

即使体素不是透明的,散点图也会绘制在体素的“顶部”:

我希望体素至少将散射体隐藏在其后面,但最好我想让体素透明(例如 alpha 0.5),散射体根据光线穿过的体素改变颜色.使用 matplotlib 可以实现这样的事情吗?

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D


x, y, z = np.random.random((3, 100)) * 5

fig = plt.figure()
ax = fig.gca(projection='3d')

ax.scatter(x, y, z)

cube = np.mgrid[0:1:0.2,0:1:0.2] > 0.5
ax.voxels(cube, edgecolor='k', linewidth=0.)

【问题讨论】:

  • 这是 matplotlib 3D 绘图的一个已知问题。见这里:matplotlib.org/mpl_toolkits/mplot3d/… 建议尝试使用 mayavi 代替
  • @tmdavison,谢谢,我不知道。那我就搬到 Mayavi。

标签: python matplotlib voxel


【解决方案1】:

正如@tmdavison 指出的那样,matplotlib 对于这类事情非常有限。这是我使用 ma​​yavi 代替的示例。

import mayavi.mlab
import np as np


x, y, z = np.random.random((3, 100)) * 5
xx, yy, zz = np.where(np.mgrid[0:1:0.2,0:1:0.2] > 0.5)

nodes = mayavi.mlab.points3d(x, y, z,
                             color=(1, 0, 0),
                             scale_factor=0.1)

mayavi.mlab.points3d(xx, yy, zz,
                     mode="cube",
                     color=(0, 1, 0),
                     scale_factor=1)

mayavi.mlab.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    相关资源
    最近更新 更多