前言
残差误差棒图是残差分析中必不可少的图,下面我将介绍一下我画的残差散点图
话不多说先上图:
一、数据读取
import numpy as np
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
data = pd.read_excel('残差分析数据.xlsx', engine='openpyxl')
print(data)
A = data['A']
r_inter = data['r_inter']
r_intra = data['r_intra']
二、数据分段
根据横坐标A将残差数据分段,计算不同段的均值和标准差
1.数据分段
r_intra2 = []
r_intra3 = []
r_intra4 = []
r_intra5 = []
r_intra6 = []
r_intra7 = []
r_intra8 = []
for i in range(len(r_intra)):
if 0<=A[i]<50:
r_intra1.append(r_intra[i])
elif 50<=A[i]<100:
r_intra2.append(r_intra[i])
elif 100 <= A[i] < 150:
r_intra3.append(r_intra[i])
elif 150 <=A[i] < 200:
r_intra4.append(r_intra[i])
elif 200 <= A[i] < 250:
r_intra5.append(r_intra[i])
elif 250 <= A[i] < 300:
r_intra6.append(r_intra[i])
elif 300 <= A[i] < 350:
r_intra7.append(r_intra[i])
elif 350 <= A[i] < 400:
r_intra8.append(r_intra[i])
2.计算均值和标准差
def mean_std(residual):
m = np.mean(residual)
s = np.std(residual)
return m, s
m1, s1 = mean_std(r_intra1)
m2, s2 = mean_std(r_intra2)
m3, s3 = mean_std(r_intra3)
m4, s4 = mean_std(r_intra4)
m5, s5 = mean_std(r_intra5)
m6, s6 = mean_std(r_intra6)
m7, s7 = mean_std(r_intra7)
m8, s8 = mean_std(r_intra8)
三、画图
fig = plt.figure(figsize=(5, 4))
plt.rcParams['xtick.direction'] = 'in' # 将x周的刻度线方向设置向内
plt.rcParams['ytick.direction'] = 'in' # 将y轴的刻度方向设置向内
plt.rcParams['font.family'] = ["Times New Roman"] # 字体设置为Times NewRoman
plt.scatter(A, r_intra, c='none', edgecolors='gray', alpha=0.8)
# 画散点图, c表示填充数据颜色,edgecolors表示散点外圈颜色, alpha表示透明度(0-1)
plt.errorbar([25, 75, 125, 175, 225, 275, 325, 375], [m1, m2, m3, m4, m5, m6, m7, m8],
yerr=[s1, s2, s3, s4, s5, s6, s7, s8], fmt='s-', ecolor='black', color='red',
elinewidth=2.5, capsize=5)
# 绘制数据的误差置信区间图,前三个list分别表示:误差棒的位置,均值,方差,其余参数解释见matplotlib官网在这里插入代码片`
plt.xlabel('A (unit)', size=12)
plt.ylabel('Intra-event Residual', fontsize=12)
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
# plt.text(250, 3.2, 'SA(T=10s)', fontsize=14)
plt.grid(linewidth=0.5, linestyle='--', which='both', alpha=0.5, zorder=0)
#绘制网格线
plt.ylim(-6, 4)
# plt.tight_layout()
# plt.show()
plt.savefig('Figure_residual.png', dpi=300)
最终生成的结果见上图