我想知道如何用Python绘制许多多维数据集。对于每个立方体,我都有它的坐标(Xmin,Xmax,Ymin,Ymax,Zmin,Zmax)和它的值,以便根据这个值绘制立方体。其实我真正想画的是体素。
我见过一些库,比如matplotlib、mayavi、OpenGL,但我不知道该使用哪一个库以及如何使用。我认为这并不难,因为立方体是一个简单的正则图形,但我无法找到答案。
由于我必须绘制许多立方体,最好设置范围,而不是表示所有立方体,我知道mayavi有这个选项。
在mayavi中,可以使用mlab.points3d
从预定义形状列表中设置字形类型。
points = mlab.points3d(px, py, pz, mode='cube')
这将在立方体中心的每个点绘制立方体。
您也可以绘制字形,然后稍后使用更改源类型
points.glyph.glyph_source.glyph_source = points.glyph.glyph_source.glyph_dict['cube_source']
(您也可以在管道菜单中执行此操作)
scale_factor
参数将允许您更改多维数据集大小。
逐体素数据绘制体素是一种不方便的方法,但它可以满足您的要求。
例如,在mayavi
中,可以使用mesh
绘制立方体的面。
from mayavi import mlab
import numpy as np
def cube_faces(xmin, xmax, ymin, ymax, zmin, zmax):
faces = []
x,y = np.mgrid[xmin:xmax:3j,ymin:ymax:3j]
z = np.ones(y.shape)*zmin
faces.append((x,y,z))
x,y = np.mgrid[xmin:xmax:3j,ymin:ymax:3j]
z = np.ones(y.shape)*zmax
faces.append((x,y,z))
x,z = np.mgrid[xmin:xmax:3j,zmin:zmax:3j]
y = np.ones(z.shape)*ymin
faces.append((x,y,z))
x,z = np.mgrid[xmin:xmax:3j,zmin:zmax:3j]
y = np.ones(z.shape)*ymax
faces.append((x,y,z))
y,z = np.mgrid[ymin:ymax:3j,zmin:zmax:3j]
x = np.ones(z.shape)*xmin
faces.append((x,y,z))
y,z = np.mgrid[ymin:ymax:3j,zmin:zmax:3j]
x = np.ones(z.shape)*xmax
faces.append((x,y,z))
return faces
def mlab_plt_cube(xmin,xmax,ymin,ymax,zmin,zmax):
faces = cube_faces(xmin,xmax,ymin,ymax,zmin,zmax)
for grid in faces:
x,y,z = grid
mlab.mesh(x,y,z,opacity=0.4)
mlab_plt_cube(0,1,0,1,0,1)
mlab.show()
我敢打赌cube_faces
函数只有一行。不过,我太累了,这一秒就想不起来了。