目录

态密度和能带联合作图

misaraty 更新 | 2022-01-26
前言
态密度(DOS)和能带(BANDS)联合作图方案总结。

目标

  • DOSBANDS放一起,右侧DOS,左侧BANDS

  • DOS按照原子类型进行投影。

  • BANDS依据元素贡献不同分别着色。

面临的问题
  • 因为BANDS根据RGB三色作图,所以最多显示三种元素。

  • 网上脚本缺少字体类型、字号等方面调控。

解决方案

下载所有方案

sumo

1

  • 安装
1
pip install sumo
  • 准备文件./bands/vasprun.xml./bands/KPOINTS./bands/colours.conf./bands/colours.style

    ./bands/colours.conf

1
2
3
4
[I]
p = r
[Pb]
p = b

          ./bands/colours.style

1
2
3
xtick.major.size : 0
# font.size : 18
# https://viscid-hub.github.io/Viscid-docs/docs/dev/styles/seaborn-ticks.html
  • 判断哪种元素的PDOS贡献较大。
1
sumo-dosplot --config colours.conf --format jpg --dpi 300 --ylabel PDOS --columns 1 --xmin -2 --xmax 2
  • DOS作图
1
sumo-dosplot --elements I.p,Pb.p --config colours.conf --format jpg --dpi 300 --ylabel PDOS --columns 1 --xmin -2 --xmax 2

./sumo_dos.jpg
DOS

  • BANDS作图
1
sumo-bandplot --project Pb.s,Pb.p,I.s,I.p --mode stacked --circle-size 90 --format jpg --dpi 300

./sumo_bands.jpg
BANDS

  • DOS+BANDS作图
1
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

./sumo_dos_bands.jpg
DOS+BANDS

Pymatgen

2

  • 安装
1
2
conda install -c conda-forge pymatge
pip install pymatgen
  • 运行
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/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.jpg
DOS+BANDS

vaspkit

3

  • 使用vaspkit分别生成DOS和BANDS的dat文件,然后使用OriginPython + Matplotlib/SeabornMatlab等作图。


  1. sumo ↩︎

  2. Pymatgen ↩︎

  3. vaspkit ↩︎