使用python绘制线性回归散点图和回归线以及置信区间线,使用的数据直接随机写两个一维数组,作为x、y值。

import pandas as pd
from scipy import stats
import matplotlib.pyplot as plt
import numpy as np

x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]

slope, intercept, r, p, std_err = stats.linregress(x, y)
print(slope, intercept, r, p, std_err)
def myfunc(x):
  return slope * x + intercept
mymodel = list(map(myfunc, x))

#y=slope * x + intercept
regression_equation="y="+"{:.2f}".format(slope)+"*x+"+"{:.2f}".format(intercept)+"\nR:"+"{:.2f}".format(r)+"\nP:"+"{:.4f}".format(p)

y_pred= mymodel
print(y_pred)
std=np.std(y_pred)
# y_pred, std = model.predict(x, return_std=True)

std_z = 1.96 # from z-table for 95%
confidence_interval = std * std_z

plt.scatter(x, y)
plt.plot(x, mymodel,label=regression_equation)
plt.plot(x, y_pred - confidence_interval)
plt.plot(x, y_pred + confidence_interval)

plt.fill_between(x, y_pred - confidence_interval, y_pred + confidence_interval)
plt.xlabel('x axis')
plt.ylabel('y axis')
plt.legend(loc="best") # 指定legend的位置,读者可以自己help它的用法
plt.title('polyfitting')
plt.show()

计算效果如下:

修改一下代码,显示置信区间图例标签,效果如下:

plt.plot(x, y_pred - confidence_interval,label="95%-")
plt.plot(x, y_pred + confidence_interval,label="95%+")

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐