好吧,所以我有这个1' s和0'的3d数组,它应该代表一个3d对象。 0表示那里什么都没有。 1表示对象存在于该坐标中。我需要在屏幕上显示3d对象。对于我来说,最理想的是具有依赖于颜色的离散3维图形。我试着看看glumpy和vispy但是文档页面现在似乎已经关闭了。
答案 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_surface
或scatter
代替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()
答案 2 :(得分:0)
您可以将每个“1”点的x,y,z坐标保存到文件中,并使用cloudcompare或meshlab显示吗?
Cloudcompare甚至可以让您在每个点之后存储其他值,并选择如何将这些值映射到颜色