可视化1和0的3d numpy数组

时间:2017-06-29 12:33:42

标签: python arrays numpy 3d

好吧,所以我有这个1' s和0'的3d数组,它应该代表一个3d对象。 0表示那里什么都没有。 1表示对象存在于该坐标中。我需要在屏幕上显示3d对象。对于我来说,最理想的是具有依赖于颜色的离散3维图形。我试着看看glumpy和vispy但是文档页面现在似乎已经关闭了。

3 个答案:

答案 0 :(得分:1)

使用np.where提取坐标,并使用matplotlib获取3D绘图。

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

data = np.zeros(shape=(20, 20, 20), dtype=np.bool_)
np.fill_diagonal(data, True)

fig = plt.figure()
Axes3D(fig).plot_wireframe(*np.nonzero(data))
plt.show()

根据矩阵中出现的位置绘制基本3D线框。您可能希望使用plot_surfacescatter代替plot_wireframe。有关详细信息,请参阅the documentation

答案 1 :(得分:1)

我制作了pull request to matplotlib that does exactly this,添加了ax3d.voxels功能。 不幸的是,它尚未完全审核。

更新:这使它成为matplotlib 2.1

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# your real data here - some 3d boolean array
x, y, z = np.indices((10, 10, 10))
voxels = (x == y) | (y == z)

ax.voxels(voxels)

plt.show()

image

答案 2 :(得分:0)

您可以将每个“1”点的x,y,z坐标保存到文件中,并使用cloudcomparemeshlab显示吗?

Cloudcompare甚至可以让您在每个点之后存储其他值,并选择如何将这些值映射到颜色