1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
def get_element_d_pdos(e_num:int, f_name:str, x_lim:tuple, y_lim:tuple, lb_loc:str = "upper right", lb_fontsize:str = "xx-large", lb_borderpad:int = 0.3, lb_labelspacing:int = 0.3, lb_handlelength:int = 1.8, lb_handletextpad:int = 0.6) -> None: """ Args: e_num:int :in CONTCAR lb_loc:str :xx-small, x-small, small, medium, large, x-large, xx-large """ from pymatgen.io.vasp.outputs import Vasprun from pymatgen.electronic_structure.plotter import DosPlotter from pymatgen.electronic_structure.core import Orbital
dos_vasprun = Vasprun("./vasprun.xml") complete_dos = dos_vasprun.complete_dos
periodic_site = complete_dos.structure.sites[e_num] pdos_dxy = complete_dos.get_site_orbital_dos(periodic_site, Orbital.dxy) pdos_dyz = complete_dos.get_site_orbital_dos(periodic_site, Orbital.dyz) pdos_dxz = complete_dos.get_site_orbital_dos(periodic_site, Orbital.dxz) pdos_dz2 = complete_dos.get_site_orbital_dos(periodic_site, Orbital.dz2) pdos_dx2_y2 = complete_dos.get_site_orbital_dos(periodic_site, Orbital.dx2)
plt_d = DosPlotter(stack=False) plt_d.add_dos("dxy", pdos_dxy) plt_d.add_dos("dyz", pdos_dyz) plt_d.add_dos("dxz", pdos_dxz) plt_d.add_dos("dz2", pdos_dz2) plt_d.add_dos("dx2-y2", pdos_dx2_y2)
axes = plt_d.get_plot(xlim=x_lim, ylim=y_lim)
handles, labels = axes.get_legend_handles_labels() unique_dict = {label: handle for handle, label in zip(handles, labels)} unique_handles = list(unique_dict.values()) unique_labels = list(unique_dict.keys())
axes.legend( unique_handles, unique_labels, loc = lb_loc, fontsize = lb_fontsize, borderpad = lb_borderpad, labelspacing = lb_labelspacing, handlelength = lb_handlelength, handletextpad = lb_handletextpad )
fig = axes.get_figure() fig.savefig(f_name, dpi = 300)
return
if __name__ == "__main__": get_element_d_pdos(121, "Ru_d_pdos.png", (-2, 5), (-8.5, 8)) get_element_d_pdos(122, "La_d_pdos.png", (-10, 10), (-2.5, 3.5))
|