计算化学公社
标题:
求助,请问大家如何修改代码,可以使这个DOS图更清晰?
[打印本页]
作者Author:
不会扣篮的后卫
时间:
2024-1-4 13:16
标题:
求助,请问大家如何修改代码,可以使这个DOS图更清晰?
大家好,我在使用基于Quantum Espresso开发的eQE程序跑动力学。基于产生的输出文件,提取每一步产生(大约1700步,一步为1 fs)的轨道能量画出DOS图,如下所示,
(, 下载次数 Times of downloads: 27)
上传 Uploaded
点击下载Click to download
我感觉画出来的图不能清晰的展示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()
复制代码
欢迎光临 计算化学公社 (http://bbs.keinsci.com/)
Powered by Discuz! X3.3