文章目录

前言一、数据读取二、数据分段1.数据分段2.计算均值和标准差

三、画图

前言

残差误差棒图是残差分析中必不可少的图,下面我将介绍一下我画的残差散点图 话不多说先上图:

一、数据读取

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)

最终生成的结果见上图

精彩链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: