1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python散点图拟合曲线如何求拟合_python散点图最佳拟合直线的代码

python散点图拟合曲线如何求拟合_python散点图最佳拟合直线的代码

时间:2023-02-24 04:57:51

相关推荐

python散点图拟合曲线如何求拟合_python散点图最佳拟合直线的代码

你可以用numpy的polyfit。我使用以下(您可以安全地删除关于确定系数和误差界限的位,我只是认为它看起来不错):#!/usr/bin/python3

import numpy as np

import matplotlib.pyplot as plt

import csv

with open("example.csv", "r") as f:

data = [row for row in csv.reader(f)]

xd = [float(row[0]) for row in data]

yd = [float(row[1]) for row in data]

# sort the data

reorder = sorted(range(len(xd)), key = lambda ii: xd[ii])

xd = [xd[ii] for ii in reorder]

yd = [yd[ii] for ii in reorder]

# make the scatter plot

plt.scatter(xd, yd, s=30, alpha=0.15, marker='o')

# determine best fit line

par = np.polyfit(xd, yd, 1, full=True)

slope=par[0][0]

intercept=par[0][1]

xl = [min(xd), max(xd)]

yl = [slope*xx + intercept for xx in xl]

# coefficient of determination, plot text

variance = np.var(yd)

residuals = np.var([(slope*xx + intercept - yy) for xx,yy in zip(xd,yd)])

Rsqr = np.round(1-residuals/variance, decimals=2)

plt.text(.9*max(xd)+.1*min(xd),.9*max(yd)+.1*min(yd),'$R^2 = %0.2f$'% Rsqr, fontsize=30)

plt.xlabel("X Description")

plt.ylabel("Y Description")

# error bounds

yerr = [abs(slope*xx + intercept - yy) for xx,yy in zip(xd,yd)]

par = np.polyfit(xd, yerr, 2, full=True)

yerrUpper = [(xx*slope+intercept)+(par[0][0]*xx**2 + par[0][1]*xx + par[0][2]) for xx,yy in zip(xd,yd)]

yerrLower = [(xx*slope+intercept)-(par[0][0]*xx**2 + par[0][1]*xx + par[0][2]) for xx,yy in zip(xd,yd)]

plt.plot(xl, yl, '-r')

plt.plot(xd, yerrLower, '--r')

plt.plot(xd, yerrUpper, '--r')

plt.show()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。