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

如何为Matplotlib折线图添加标准差误差棒?附数据与代码

为折线图添加标准差误差棒的解决方案

步骤1:高效计算均值与标准差

用numpy内置函数替代手动求和计算,既简洁又能保证精度,样本标准差需设置ddof=1(自由度减1,符合实验数据的统计逻辑):

import numpy as np
import matplotlib.pyplot as plt

# 原始实验数据
y20_6 = np.array([18351.6,17976.6,16101.6])
y20_12 = np.array([15664.1,16984.4,18304.7])
y20_18 = np.array([13031.3,13218.8,15468.8])

y80_6 = np.array([17109.4,16890.65,16671.9])
y80_12 = np.array([15867.2,18265.6,16132.8])
y80_18 = np.array([18304.2,17070.3,15539.1])

i20_6 = np.array([11375,11070.3,10398.4])
i20_12 = np.array([11273.4,10929.7,11304.7])
i20_18 = np.array([11789.1,10507.8,12507.8])

i80_6 = np.array([11906.3,9421.88,10218.8])
i80_12 = np.array([9750,10335.95,10921.9])
i80_18 = np.array([10109.4,10660.15,11210.9])

# 将每组数据整理为二维数组,方便批量计算
y20_data = np.array([y20_6, y20_12, y20_18])
y80_data = np.array([y80_6, y80_12, y80_18])
i20_data = np.array([i20_6, i20_12, i20_18])
i80_data = np.array([i80_6, i80_12, i80_18])

# 按行计算均值
y20_mean = y20_data.mean(axis=1)
y80_mean = y80_data.mean(axis=1)
i20_mean = i20_data.mean(axis=1)
i80_mean = i80_data.mean(axis=1)

# 计算样本标准差
y20_std = y20_data.std(axis=1, ddof=1)
y80_std = y80_data.std(axis=1, ddof=1)
i20_std = i20_data.std(axis=1, ddof=1)
i80_std = i80_data.std(axis=1, ddof=1)

步骤2:绘制带误差棒的折线图

使用plt.errorbar()替代原有的plt.plot(),该函数可同时绘制折线、标记点和误差棒,完美匹配你的需求:

x = np.array([0,1,2])
z = np.array([10518.2, 10518.2, 10518.2])
my_xticks = ['6 hrs','12 hrs','18 hrs']
plt.xticks(x, my_xticks)

# 绘制带误差棒的折线,capsize参数设置误差棒两端短帽长度,提升可读性
plt.errorbar(x, y20_mean, yerr=y20_std, linestyle='-', marker='o', capsize=5, label='20 $^\circ$C, 175 $^\circ$C')
plt.errorbar(x, y80_mean, yerr=y80_std, linestyle='-', marker='v', capsize=5, label='80 $^\circ$C, 175 $^\circ$C')
plt.errorbar(x, i20_mean, yerr=i20_std, linestyle='-', marker='s', capsize=5, label='20 $^\circ$C, 275 $^\circ$C')
plt.errorbar(x, i80_mean, yerr=i80_std, linestyle='-', marker='x', color='black', capsize=5, label='80 $^\circ$C, 275 $^\circ$C')

# 参考线保持原有样式
plt.plot(x, z, linestyle='--', label='Reference')

plt.legend(bbox_to_anchor=(1.35, 1.005), loc='upper right', borderaxespad=0)
plt.ylim([10000, 18000])
# plt.show()
plt.savefig('AL380', dpi=600, bbox_inches='tight')

关键参数说明

  • yerr:传入标准差数组,用于生成垂直方向的误差棒
  • capsize:控制误差棒两端短帽的长度,避免误差棒与折线混淆,让图表更直观
  • 其余样式参数(linestyle、marker、color)与原代码保持一致,确保图表风格不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 16:08:10