gpt4 book ai didi

python - 如何在绘制 R2 值时使趋势线穿过原点 - python

转载 作者:行者123 更新时间:2023-12-04 00:53:58 26 4
gpt4 key购买 nike

我正在使用一个如下所示的数据框 df:

index       var1      var2      var3
0 0.0 0.0 0.0
10 43940.7 2218.3 6581.7
100 429215.0 16844.3 51682.7

我想绘制每个变量,绘制它们强制到原点的趋势线,计算并绘制 R2 值。

我在 this post 中找到了我想要的东西但是趋势线没有穿过原点,我找不到让它起作用的方法。

我试图手动修改趋势线第一个点的值,但结果似乎不太好。

for var in df.columns[1:]:
fig, ax = plt.subplots(figsize=(10,7))

x = df.index
y = df[var]

z = numpy.polyfit(x, y, 1)
p = numpy.poly1d(z)
pylab.plot(x,p(x),"r--")

plt.plot(x,y,"+", ms=10, mec="k")
z = np.polyfit(x, y, 1)
y_hat = np.poly1d(z)(x)
y_hat[0] = 0 ###--- Here I tried to replace the first value with 0 but it doesn't seem right to me.

plt.plot(x, y_hat, "r--", lw=1)
text = f"$y={z[0]:0.3f}\;x{z[1]:+0.3f}$\n$R^2 = {r2_score(y,y_hat):0.3f}$"
plt.gca().text(0.05, 0.95, text,transform=plt.gca().transAxes, fontsize=14, verticalalignment='top')

有什么办法吗?任何帮助将不胜感激。

最佳答案

您可以为此使用 Scipy 和 curve_fit。确定您的趋势线为 y=ax,以便它穿过原点。

import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

def func(x, a):
return a * x

xdata = (0,10,20,30,40)
ydata = (0,12,18,35,38)

popt, pcov = curve_fit(func, xdata, ydata)
plt.scatter(xdata, ydata)
plt.plot(xdata, func(xdata, popt),"r--")
plt.show()

plot

关于python - 如何在绘制 R2 值时使趋势线穿过原点 - python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64125907/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com