VASP.pdos のソースコード

# written by He Xinyi, modified by T. Kamiya
"""
PDOS (部分状態密度) データをグラフ化し、画像ファイルとして保存するスクリプト。

詳細説明:
    このスクリプトは、コマンドライン引数で指定されたPDOSデータファイルを読み込み、
    Matplotlibライブラリを用いてPDOSプロットを生成します。
    生成されたグラフは 'dos.png' というファイル名でカレントディレクトリに保存されます。
    軸ラベル、フォント設定、凡例、プロット範囲など、グラフの表示に関する詳細な設定が含まれています。
    このスクリプトは、特定のファイル形式のDOSデータを視覚化するために設計されています。

:param file: PDOSデータを含む入力ファイルのパス。(sys.argv[1]で受け取られます)
:type file: str

:returns: なし。グラフ画像ファイル 'dos.png' がカレントディレクトリに生成されます。
:rtype: None

:doc:`pdos_usage`
"""

import numpy as np
import matplotlib as mpl
mpl.use('Agg') #silent mode
from matplotlib import pyplot as plt
import matplotlib.ticker as ticker
import sys

#------------------ FONT_setup ----------------------
font = {'family' : 'arial', 
    'color'  : 'black',
    'weight' : 'normal',
    'size' : 18.0,
    }


[ドキュメント] def usage(): print("") print("usage: python {} dosfile".format(sys.argv[0])) print("")
[ドキュメント] def main(): argv = sys.argv narg = len(argv) if narg < 2: usage() sys.exit(1) file = argv[1] xmin=-2 xmax=2 ymax=10 #------------------- Data Read ---------------------- print("") print(f"Read DOS from [{file}]") with open(file,"r") as reader: legend = reader.readline() legends=legend.split()[1:] legends=[i.replace("_"," ") for i in legends] legend_s=tuple(legends) datas=np.loadtxt(file,dtype=np.float64,skiprows=1) #--------------------- PLOTs ------------------------ axe = plt.subplot(111) plt.subplots_adjust(left=0.18, right=0.95, top=0.95, bottom=0.18) # Color methods! choose only one of the two methods axe.plot(datas[:,0],datas[:,1:],linewidth=1.0) #auto colors axe.set_xlabel(r'${E}$-$E_{F}$ (eV)',fontdict=font) axe.set_ylabel(r'PDOS (states/eV)',fontdict=font) #my_y_ticks=np.arange(0, ymax,ymax/2) my_x_ticks=np.arange(-5, 5,1) plt.xticks(my_x_ticks,fontsize=font['size']-2) plt.yticks(fontsize=font['size']-2,fontname=font['family']) plt.legend(legend_s,loc='upper right') plt.xlim(( xmin, xmax)) # set y limits manually plt.ylim(( 0, ymax)) leg = plt.gca().get_legend() ltext = leg.get_texts() plt.setp(ltext, fontsize=font['size']) fig = plt.gcf() fig.set_size_inches( 5, 4) plt.savefig('dos.png',dpi= 300,transparent=True)
if __name__ == '__main__': main()