费米面图

1 投票
1 回答
2120 浏览
提问于 2025-04-18 17:22

我想做一个费米面图,简单来说就是在二维空间里展示一些数据。具体来说,我想在K空间中找到一个平面,然后在这个平面上画出f(n,vec_k)=e_f的图,也就是通过插值来处理数据。我有一个叫做Eigen的numpy数组,它的形状是:

Eigen.shape = (100,100,100,10),其中前面三个维度是关于向量vec_k的,第三个维度是能带索引'n'。我想知道怎么在Eigen等于e_f的任意表面上切割出一部分数据,其中e_f是一个具体的数字。

1 个回答

2

这个问题一般是通过一种叫做“行进立方体算法”的方法来解决的。你可以看看 MLab 中的 contour3d() 函数,具体信息可以在这里找到:http://docs.enthought.com/mayavi/mayavi/auto/mlab_helper_functions.html#mayavi.mlab.contour3d。这个函数正好可以满足你的需求。

contour3d(Eigen[:,:,:, bandNo], contours=e_f)

这个应该能帮到你。你还可以为所有的带指定多个表面,方法如下:

for bandNo in range(totalBands):
    contour3d(Eigen[:,:,:, bandNo], contours=[eF1, eF2, eF3], opacity=0.4)

你应该能得到像这样的图表:http://docs.enthought.com/mayavi/mayavi/_images/enthought_mayavi_mlab_contour3d1.jpg

撰写回答