态密度和能带画图Bands Structure and Density of States Plot

目标:将dos和bands放一起,右侧dos,左侧bands;bands和dos中按照原子类型进行投影;bands中的线条按照元素种类贡献不同着色,着色原理为RGB。

缺陷:因为bands按照RGB三色,所以最多显示元素种类为3;网上脚本对字体家族、大小等细节方面缺少调控。

方案一:使用sumo

Thansks very much to Scanlon Materials Theory Group. Please cite Ganose A M, Jackson A J, Scanlon D O. sumo: Command-line tools for plotting and analysis of periodic* ab initio* calculations[J]. Journal of Open Source Software, 2018, 3(28): 717.

安装,

pip install sumo

准备文件,./bands/vasprun.xml、./bands/KPOINTS、./bands/colours.conf、./bands/colours.style。

./bands/colours.conf为,

[I]
p = r

[Pb]
p = b

./bands/colours.style为,

xtick.major.size : 0
# font.size : 18

# https://viscid-hub.github.io/Viscid-docs/docs/dev/styles/seaborn-ticks.html

运行如下,判断哪种PDOS贡献较大,By default, a significant contribution is defined as greater than 3 % of the max total density of states.

sumo-dosplot --config colours.conf --format jpg --dpi 300 --ylabel PDOS --columns 1 --xmin -2 --xmax 2

运行如下,

sumo-dosplot --elements I.p,Pb.p --config colours.conf --format jpg --dpi 300 --ylabel PDOS --columns 1 --xmin -2 --xmax 2

画出dos,

运行如下,画出band structure,

sumo-bandplot --project Pb.s,Pb.p,I.s,I.p --mode stacked --circle-size 90 --format jpg --dpi 300

运行如下,画出dos+band structure,

sumo-bandplot  --dos ../dos/vasprun.xml --project I.p,Pb.p --elements I.p,Pb.p --config colours.conf --format jpg --dpi 300 --ymin -2 --ymax 2  --dos-label "DOS" --band-edges --style colours.style -p dos

方案二:使用pymatgen

安装,

conda install -c conda-forge pymatge
pip install pymatgen

运行,

#!/usr/bin/env python
# -*-coding:utf-8 -*-

import os
import re
import linecache
import math
import shutil
import numpy as np
import matplotlib.pyplot as plt
from pymatgen.io.vasp.outputs import Vasprun
from pymatgen.electronic_structure.plotter import BSDOSPlotter,BSPlotter,BSPlotterProjected,DosPlotter
os.chdir(os.path.split(os.path.realpath(__file__))[0])

dos_vasprun=Vasprun("./dos/vasprun.xml")
dos_data=dos_vasprun.complete_dos

# https://pymatgen.org/pymatgen.io.vasp.outputs.html?highlight=get_band_structure#pymatgen.io.vasp.outputs.Vasprun.get_band_structure
bands_vasprun = Vasprun("./bands/vasprun.xml",parse_projected_eigen=True)
bands_data = bands_vasprun.get_band_structure(line_mode=True)
 
dos_bands = BSDOSPlotter(bs_projection='elements', dos_projection='elements',vb_energy_range=2, cb_energy_range=2, egrid_interval=1, fixed_cb_energy=True,  font='Microsoft YaHei', axis_fontsize=24, tick_fontsize=20, legend_fontsize=20, bs_legend='best', dos_legend='best', rgb_legend=True, fig_size=(11, 8.5))
# https://pymatgen.org/pymatgen.electronic_structure.plotter.html

dos_bands.get_plot(bs=bands_data, dos=dos_data)

plt.savefig('dos_bands.jpg', dpi=300)

显示,

参考:

pymatgen_bs_dos_plot

Band Structure of NiO

pymatgen绘制能带态密度图(band+DOS)

方案三:vaspkit分别生成bands和dos的dat文件,然后使用origin、python/matplotlib/seaborn、matlab等作图。

上述资料打包下载

其他参考:

plot DOS & Band Structure

bandstructureplots

Projected Band Structure and DOS (Individual Atoms)

Projected Band Structure and DOS

PyProcar