12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- import numpy as np
- import pandas as pd
- import matplotlib.pyplot as plt
- plt.rcParams['font.sans-serif']=['SimHei']
- plt.rcParams['axes.unicode_minus']=False
- # 生成曲线数据
- x = np.linspace(-5, 20, 10000)
- y = -0.002 * x + 0.999
- # 生成散点数据
- data = pd.read_csv('/home/limingze/zlwl-algos/USER/limingze/Inconsistency/result/dis.csv')
- x_scatter = data['pca'].values
- y_scatter = data['cell_pack'].values
- y_pred = -0.002 * x_scatter + 0.999
- # 计算置信区间
- slope, intercept = np.polyfit(x_scatter, y_scatter, 1)
- y_pred = slope * x + intercept
- residuals = y_scatter - (slope * x_scatter + intercept)
- mse = np.mean(residuals**2)
- std_err = np.sqrt(mse)
- t_value = 2.093 # 自由度为 n-2,置信水平为95%,查表得到对应的t值
- ci_lower = slope - t_value * std_err
- ci_upper = slope + t_value * std_err
- # 绘制曲线和散点图
- plt.title('放电验证')
- plt.xlabel('pca')
- plt.ylabel('E_real/E_theo')
- plt.plot(x, y, label='True Line')
- plt.scatter(x_scatter, y_scatter, label='Scatter Points')
- # plt.plot(x, y_pred, label='Fitted Line')
- iii = 0
- diff_list = []
- for i in range(len(data['cell_pack'].values)):
- if (data['cell_pack'].values[i] > -0.002*data['pca'].values[i]+0.999+0.1) | (data['cell_pack'].values[i] < -0.002*data['pca'].values[i]+0.999-0.1):
- iii+=1
- if (data['cell_pack'].values[i] > -0.002*data['pca'].values[i]+0.999+0.1):
- diff_list.append((data['cell_pack'].values[i]) - (-0.002*data['pca'].values[i]+0.999+0.1))
- elif (data['cell_pack'].values[i] < -0.002*data['pca'].values[i]+0.999-0.1):
- diff_list.append((-0.002*data['pca'].values[i]+0.999+0.1) - (data['cell_pack'].values[i]))
- print(sum(diff_list)/len(diff_list))
- print(iii/len(data['cell_pack'].values))
- # 绘制置信区间
- # plt.fill_between(x, 0.011*x+1.008+t_value*std_err, 0.011*x+1.008-t_value*std_err, alpha=0.3, label='95%置信区间')
- plt.fill_between(x, -0.002*x+0.999+0.1, -0.002*x+0.999-0.1, alpha=0.3, label='10%误差区间')
- plt.legend()
- plt.show()
|