如何为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
相关产品推荐
相关产品推荐

