使用mayavi绘制从文件读取的三维数据



我有一个以下格式的数据文件:

x y z f(x) f(y) f(z)

我想用mayavi:的contour3d绘制它

def fill_array(output_array,source_array,nx,ny,nz,position):
    for i in range(nx):
        for j in range(ny):
            for k in range(nz):
                output_array[i][j][k] = source_array[i][j][k][position]
nx = 8
ny = 8
nz = 8
ndim = 6
x = np.zeros((nx,ny,nz))
y = np.zeros((nx,ny,nz))
z = np.zeros((nx,ny,nz))
fx = np.zeros((nx,ny,nz))
fy = np.zeros((nx,ny,nz))
fz = np.zeros((nx,ny,nz))
data_file = np.loadtxt('datafile')
f = np.reshape(data_file, (nx,ny,nz,ndim))
fill_array(x,f,nx,ny,nz,0))
fill_array(y,f,nx,ny,nz,1)
fill_array(z,f,nx,ny,nz,2)
fill_array(fx,f,nx,ny,nz,3)
fill_array(fy,f,nx,ny,nz,4)
fill_array(fz,f,nx,ny,nz,5)
f2 = fx**2 + fy**2 + fz**2
plot_data = mlab.contour3d(f2)
mlab.colorbar(plot_data,title='f2',orientation='vertical')
mlab.savefig('f.png',magnification=5)

当数据按(x,y,z)网格数据的顺序排列时,这种方法运行良好。但由于文件不按顺序写入,它会创建与有序数据不匹配的绘图(我知道这是正确的)。原因/解决方案是什么?

当然,我只想排列x,y,z,然后将函数值f(x),f(y),f。

成功了
我在阅读文件后添加了以下内容(其余代码保持不变):

data_file = np.loadtxt('datafile', 
dtype=[('x',float),('y',float),('z',float),('fx',float),('fy',float),('fz',float)])
data_file = np.sort(data_file,order=['z','y'])
f = np.array(data_file).reshape(nx,ny,nz)

相关内容

  • 没有找到相关文章

最新更新