|
大家好,我在使用基于Quantum Espresso开发的eQE程序跑动力学。基于产生的输出文件,提取每一步产生(大约1700步,一步为1 fs)的轨道能量画出DOS图,如下所示,
我感觉画出来的图不能清晰的展示DOS图的峰值,请问大家有什么修改建议吗(附上代码和数据文件)?
- import numpy as np
- import matplotlib.pyplot as plt
- from matplotlib import cm
- # 初始化一个列表,用于存储所有帧的数据
- all_data = []
- # 读取 frame_1_energy.txt 中的数据
- filename = "frame_0_energy.txt"
- with open(filename, 'r') as file:
- lines = file.readlines()
- # 提取整个文件的数据并将其转换为浮点数列表
- data = [float(value) for line in lines for value in line.split()]
- all_data.append(data)
- # 读取其他文件的数据并添加到列表中
- for i in range(1, 1722): # 读取 frame_2_energy.txt 到 frame_10_energy.txt 的数据
- filename = f"frame_{i}_energy.txt"
- with open(filename, 'r') as file:
- lines = file.readlines()
- # 提取整个文件的数据并将其转换为浮点数列表
- data = [float(value) for line in lines for value in line.split()]
- all_data.append(data)
- # 绘制水平直方图
- plt.figure(figsize=(10, 6))
- # Viridis colormap
- colors = cm.viridis(np.linspace(0, 1, len(all_data)))
- # 绘制水平直方图并计算并绘制高斯拟合曲线
- for i, (data, color) in enumerate(zip(all_data, colors)):
- mu, std = np.mean(data), np.std(data)
- num_bins = 400 # 将直方图分成50个柱子
- n, bins, patches = plt.hist(data, bins=num_bins, density=True, alpha=0.3, label=f'Frame {i+1}', orientation='horizontal', color=color)
- # 计算并绘制高斯拟合曲线
- xmin, xmax = min(data), max(data)
- x = np.linspace(xmin, xmax, 2000)
- p = (1/(std * np.sqrt(2 * np.pi))) * np.exp(-(x - mu)**2 / (2 * std**2))
- # plt.plot(p, x, 'k', linewidth=2)
- plt.ylim(-5.5, 5.5)
- plt.xlabel('Density of states', fontsize=14) # 设置x轴标签的字体大小
- plt.ylabel('Orbital Energy, eV', fontsize=14) # 设置y轴标签的字体大小
- plt.title('Probability Density of Orbital Energy', fontsize=16)
- plt.xticks(fontsize=14) # 设置x轴刻度的字体大小
- plt.yticks(fontsize=14) # 设置y轴刻度的字体大小
- plt.grid(True)
- plt.savefig('DOS_plot.png', dpi=600)
- plt.show()
复制代码
|
-
-
数据文件.zip
707.76 KB, 下载次数 Times of downloads: 1
|