我正在尝试可视化3D数据。这是一个完整的3D矩阵:每个(x,y,z)坐标具有一个值,这与表面或单个数据向量的集合不同。我尝试这样做的方法是绘制一个不透明的立方体,其中立方体的每个边显示正交维度上的数据之和。
一些示例数据-基本上,以(3,5,7)为中心的blob:
import numpy as np
(x,y,z) = np.mgrid[0:10,0:10, 0:10]
data = np.exp(-((x-3)**2 + (y-5)**2 + (z-7)**2)**(0.5))
edge_yz = np.sum(data,axis=0)
edge_xz = np.sum(data,axis=1)
edge_xy = np.sum(data,axis=2)
所以这里的想法是生成一个显示立方体的3D图;立方体的每个表面将显示适当的2D矩阵edge_*。这就像在适当的3D位置绘制3个4边多边形(或者6个,如果你也绘制立方体的背面),除了每个多边形实际上是一个要用颜色绘制的值矩阵。
我目前最好的近似方法是计算包含倾斜边缘版本的更大矩阵,并将这些矩阵连接成一个更大的2D矩阵,然后imshow()该更大的矩阵。看起来很笨拙,做了很多matplotlib或m3 plot或其他引擎已经做的工作。它也只适用于在单一视角下查看静态图像,但这不是我目前需要克服的问题。
有没有一种好的方法可以使用现有的python工具在真正的3D图中绘制这些立方体边缘?有没有更好的方法来绘制3D矩阵?
2条答案
按热度按时间z8dt9xmd1#
Falko建议使用contourf,这有点欺骗性。这有点有限,因为至少我的contourf版本有一些bug,它有时会渲染一个平面在其他平面之前,它应该在后面,但现在只绘制立方体的三个正面或三个背面就可以了:
plot_front=True
plot_front=False
其他数据(未显示)
yh2wf1be2#
看看MayaVI。contour3d()函数可能就是你想要的。
下面是我对一个类似问题的回答,并给出了代码示例和结果图https://stackoverflow.com/a/24784471/3419537