目标:将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)
参考:
方案三:用vaspkit分别生成bands和dos的dat文件,然后使用origin、python/matplotlib/seaborn、matlab等作图。
上述资料打包下载。
其他参考:
Projected Band Structure and DOS (Individual Atoms)