You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python绘制曲线滑动平均图并计算带误差的平均值

实现xvg文件数据的滑动平均曲线绘制与统计值计算

需求说明

我拥有file.xvg文件,使用Python 3.9.12版本的matplotlib与numpy绘制其数据,现有基础脚本。需要完成两个功能:

  • 绘制滑动平均曲线
  • 计算并展示数据的平均值±标准差(示例结果为7.5 ± 160.5 bar)

基础脚本

import matplotlib.pyplot as plt
import numpy
import numpy as np
from scipy import signal

x, y = numpy.loadtxt("file.xvg", unpack=True)

fig = plt.figure(figsize=(13,8))
ax = fig.add_subplot(111)

ax.plot(x, y, color="k", linestyle='solid', linewidth=0.8)

ax.set_xlabel("Times (ps)", fontweight='bold', fontsize = 18, labelpad=3)
ax.set_ylabel("Pressures (bar)", fontweight='bold', fontsize = 18, labelpad=3)

plt.show()

修改后的完整脚本

import matplotlib.pyplot as plt
import numpy as np

# 加载xvg数据
x, y = np.loadtxt("file.xvg", unpack=True)

# 定义滑动平均计算函数
def moving_average(data, window_size):
    # 创建等权重窗口
    window = np.ones(window_size) / window_size
    # 卷积计算滑动平均,mode='same'保证输出长度与原数据一致
    return np.convolve(data, window, mode='same')

# 设置滑动窗口大小(可根据数据密度调整,示例取50个数据点)
window_size = 50
y_smoothed = moving_average(y, window_size)

# 计算统计值:平均值和标准差
mean_y = np.mean(y)
std_y = np.std(y)

# 绘图
fig = plt.figure(figsize=(13,8))
ax = fig.add_subplot(111)

# 绘制原始数据曲线
ax.plot(x, y, color="k", linestyle='solid', linewidth=0.8, label='Original Data')
# 绘制滑动平均曲线
ax.plot(x, y_smoothed, color='r', linestyle='-', linewidth=1.2, label=f'Moving Average (window={window_size})')

# 设置坐标轴标签
ax.set_xlabel("Times (ps)", fontweight='bold', fontsize=18, labelpad=3)
ax.set_ylabel("Pressures (bar)", fontweight='bold', fontsize=18, labelpad=3)

# 添加图例
ax.legend(fontsize=14)

# 在图中添加统计值标注(避免遮挡数据)
ax.text(0.05, 0.95, f'Average: {mean_y:.1f} ± {std_y:.1f} bar', 
        transform=ax.transAxes, fontsize=14, 
        bbox=dict(facecolor='white', alpha=0.8))

# 显示图像
plt.show()

# 控制台打印统计结果
print(f"数据统计结果:平均值 = {mean_y:.1f} bar,标准差 = {std_y:.1f} bar")

关键部分说明

  • 滑动平均调整:window_size可根据数据的时间间隔和波动幅度修改——数据点密集、波动大时调大窗口,反之调小
  • 统计值计算:np.mean()计算总体平均值,np.std()默认计算总体标准差;若需样本标准差,可添加参数ddof=1
  • 可视化优化:用图例区分原始数据与平滑曲线,文本框标注统计值时使用transform=ax.transAxes以相对坐标定位,避免因坐标轴范围变化导致遮挡

内容的提问来源于stack exchange,提问作者al ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 05:01:44