Bohrium
robot
新建

空间站广场

论文
Notebooks
比赛
课程
Apps
我的主页
我的Notebooks
我的论文库
我的足迹

我的工作空间

任务
节点
文件
数据集
镜像
项目
数据库
公开
Pymatgen轻松一键绘制能带(BandStructure)和态密度(DOS)图-高通量计算系列教程
Pymatgen
vasp
化学信息学
Pymatgenvasp化学信息学
wanghongshuai@dp.tech
发布于 2023-11-10
推荐镜像 :Third-party software:Deprecated
推荐机型 :c2_m4_cpu
赞 3
2
4
dos_band(v1)

Pymatgen轻松一键绘制能带(bandstructure)和态密度(DOS)图-高通量计算系列教程

代码
文本
Open In Bohrium 作者:汪鸿帅 📨
时间:2023年9月18日

推荐镜像:unimol-qsar:v0.1
推荐计算资源:CPU
内容: pymatgen是Materials Project开发的一个python库,主要用于高通量计算的输入文件设置与输出文件处理,相关软件还有Fireworks,custodian,atomate,matminer,这些软件为高通量计算提供了一个完整的解决方案。pymatgen功能强大,针对Vasp的功能最为完善,利用pymatgen可以完成大部分Vasp计算的自动化处理,优势明显,大家可以自己去进一步学习,这里只为大家简单介绍一下pymatgen在能带结构与电子态密度画图方面的简单应用。
使用方式:您可在 Bohrium Notebook 上直接运行。您可以点击界面上方蓝色按钮 开始连接,选择 unimol-qsar任意一镜像 镜像及任何一款节点配置,稍等片刻即可运行。如您遇到任何问题,请联系 bohrium@dp.tech
共享协议:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

快速作图,请直接看文末快速指南

我们正式开始。我们计算的是Si N Ti,POSCAR中只有三种原子。当前目录下有四个文件夹,so是优化计算,scf是自恰计算,bs是能带计算,dos是态密度计算,计算已经完成。注意:以!开头的是shell命令

代码
文本
  • pymatgen是面向对象编程,发挥了python的长处,因此我们首先需要创建要处理的对象。

  • 调用pymatgen.io.vasp.outputs模块,通过处理对应的vasprun.xml文件,得到两个对象dos_data与bs_data,包含了能带和态密度的所有信息。

  • 得到这两个对象以后,我们就可以根据自己的需求来画各种图,相应的模块是pymatgen.electronic_structure.plotter。

代码
文本
[15]
import matplotlib.pyplot
from pymatgen.io.vasp.outputs import Vasprun
from pymatgen.electronic_structure.plotter import BSDOSPlotter,\
BSPlotter,BSPlotterProjected,DosPlotter
vasprun=Vasprun("/bohr/dos-band-gqw2/v1/vasprun.xml",parse_projected_eigen=True)
dos_data=vasprun.complete_dos
bs_data=vasprun.get_band_structure(line_mode=1)
/opt/conda/lib/python3.8/site-packages/pymatgen/io/vasp/inputs.py:1820: UnknownPotcarWarning: POTCAR data with symbol N does not match any VASP POTCAR known to pymatgen. There is a possibility your POTCAR is corrupted or that the pymatgen database is incomplete.
  warnings.warn(
/opt/conda/lib/python3.8/site-packages/pymatgen/io/vasp/inputs.py:1820: UnknownPotcarWarning: POTCAR data with symbol Si does not match any VASP POTCAR known to pymatgen. There is a possibility your POTCAR is corrupted or that the pymatgen database is incomplete.
  warnings.warn(
/opt/conda/lib/python3.8/site-packages/pymatgen/io/vasp/inputs.py:1820: UnknownPotcarWarning: POTCAR data with symbol Ti does not match any VASP POTCAR known to pymatgen. There is a possibility your POTCAR is corrupted or that the pymatgen database is incomplete.
  warnings.warn(
代码
文本

原始的能带与态密度图

将BSDOSPlotte的参数bs_projection与dos_projection的值均设置为None,表示不读取能带和态密度的投影信息,然后通过get_plot调用bs_data与dos_data画图。
代码
文本
[16]
plt_1=BSDOSPlotter(bs_projection=None, dos_projection=None)
plt_1.get_plot(bs=bs_data,dos=dos_data)
matplotlib.pyplot.savefig('plt_1.png')
代码
文本

将能带与态密度投影到元素

将BSDOSPlotte参数bs_projection与dos_projection的值均设置为’elements‘,表示读取能带和态密度的投影到元素的信息。
代码
文本
[17]
plt_2=BSDOSPlotter(bs_projection='elements', dos_projection='elements')
plt_2.get_plot(bs=bs_data,dos=dos_data)
matplotlib.pyplot.savefig('plt_2.png')
代码
文本

将能带投影到元素,态密度投影到轨道

将参数bs_projection设置为’element‘,dos_projection的值设置为‘orbitals’。
代码
文本
[18]
plt_3=BSDOSPlotter(bs_projection='elements', dos_projection='orbitals')
plt_3.get_plot(bs=bs_data,dos=dos_data)
matplotlib.pyplot.savefig('plt_3.png')
代码
文本

能带图

pymatgen中BSPlotter与BSPlotterProjected可以满足我们关于能带画图的绝大部分需求。

原始能带图

使用BSPlotter调用bs_data即可。
代码
文本
[19]
plt_4=BSPlotter(bs=bs_data)
plt_4.get_plot()
plt_4.save_plot("plt_4.png")
代码
文本
BSDOSPlotter也可以实现这一功能,我们需将BSDOSPlotter中的bs_projection与dos_projection设置为None,表示不读取投影信息,将get_plot的dos参数设置为None,表示不画态密度图。
代码
文本
[20]
plt_5=BSDOSPlotter(bs_projection=None, dos_projection=None)
plt_5.get_plot(bs=bs_data,dos=None)
matplotlib.pyplot.savefig('plt_5.png')
代码
文本

投影到元素的能带

BSPlotterProjected的get_elt_projected_plots可以将能带投影到每一种元素然后分别作图,通过线条的粗细来表示该元素对该轨道的贡献。
代码
文本
[21]
plt_6=BSPlotterProjected(bs=bs_data)
fig_6=plt_6.get_elt_projected_plots()
matplotlib.pyplot.savefig('plt_6.png')
代码
文本
BSPlotterProjected的get_elt_projected_plots_color可以将能带投影到每一种元素作一张图,每一种元素对应一种颜色,通过不同的颜色来表示该元素对该轨道的贡献。
代码
文本
[22]
plt_7=BSPlotterProjected(bs=bs_data)
fig_7=plt_7.get_elt_projected_plots_color()
matplotlib.pyplot.savefig('plt_7.png')
代码
文本
BSDOSPlotter也可以实现这一功能,我们只需将第一行的dos_projection与第二行的dos参数均设置为None即可。
代码
文本
[23]
plt_8=BSDOSPlotter(bs_projection='elements', dos_projection=None)
plt_8.get_plot(bs=bs_data,dos=None)
matplotlib.pyplot.savefig('plt_8.png')
代码
文本

态密度图

我们可以利用DosPlotter来画各种态密度图。DosPlotter有两个重要的参数,一是sigma,与INCAR中的SIGMA对应,我们可以通过调节sigma值的大小来调节态密度图的光滑程度。二是stack,可以决定作图方式是曲线还是面积,具体如下。

总态密度

DosPlotter中的add_dos用来定义要处理的对象dos,我们调用前边定义好的dos对象dos_data。我们取stack=False或False,sigma=0.5或初始值,来对比这两个参数的意义,结果如下。
代码
文本
[24]
plt_9=DosPlotter(stack=False,sigma=0.5)
plt_9.add_dos('total dos',dos=dos_data)
plt_9.save_plot('plt_9.png' )
代码
文本
[25]
plt_10=DosPlotter(stack=False)
plt_10.add_dos('total dos',dos=dos_data)
plt_10.save_plot('plt_10.png' )
代码
文本
[26]
plt_11=DosPlotter(stack=True,sigma=0.5)
plt_11.add_dos('total dos',dos=dos_data)
plt_11.save_plot('plt_11.png' )
代码
文本

投影到轨道的态密度

利用add_dos_dict获取投影信息,对dos_data进行get_spd_dos操作,获得投影到轨道的信息。
代码
文本
[27]
plt_12=DosPlotter(stack=False,sigma=0.5)
plt_12.add_dos('total dos',dos=dos_data)
plt_12.add_dos_dict(dos_data.get_spd_dos())
plt_12.save_plot('plt_12.png' )
代码
文本

投影到元素的态密度

利用add_dos_dict获取投影信息,对dos_data进行get_element_dos操作,获得投影到元素的信息。
代码
文本
[28]
plt_13=DosPlotter(stack=False,sigma=0.5)
plt_13.add_dos('total dos',dos=dos_data)
plt_13.add_dos_dict(dos_data.get_element_dos())
plt_13.save_plot('plt_13.png' )
代码
文本

以上就是全部内容,我在上边提到的各种方法还有许多参数,值得大家去仔细研究,大家也可以通过matplotlib设置图的字体和颜色等信息,定制各种高质量的能带与态密度图。

pymatgen除了画图还在许多其他方面有强大的功能,有兴趣的可以自己去研究。接下来是针对python小白的简单粗暴的操作指南。

代码
文本

快速指南

要求 方法
原始的能带与态密度图 In[2] + In[3]
将能带与态密度投影到元素 In[2] + In[4]
将能带投影到元素,态密度投影到轨道 In[2] + In[5]
原始能带图 In[2] + In[6] 或 In[2] + In[7]
总态密度 In[2] + In[11]
投影到轨道的态密度 In[2] + In[13]
投影到元素的态密度 In[2] + In[14]
代码
文本

参考

pymatgen画能带图方法-高通量计算初探: http://blog.wangruixing.cn/2019/05/19/pymatgen-band/

pymatgen 能带与态密度绘图教程: https://mp.weixin.qq.com/s/y7if55laqS-R16It-QGUiw

代码
文本
Pymatgen
vasp
化学信息学
Pymatgenvasp化学信息学
已赞3
本文被以下合集收录
机器学习与DFT精华帖
gtang
更新于 2024-09-10
38 篇21 人关注
材料计算
虚白
更新于 2024-08-25
20 篇5 人关注
推荐阅读
公开
Pymatgen自动生成表面吸附模型-高通量计算系列教程
AlloyPymatgen化学信息学
AlloyPymatgen化学信息学
wanghongshuai@dp.tech
发布于 2023-09-18
4 赞5 转存文件
公开
Pytorch基础教程(一):Tensor
PyTorchDeep Learning
PyTorchDeep Learning
爱学习的王一博
发布于 2024-03-11
4 赞5 转存文件