3

我在 matplotlib 中针对 2d 数组(y 轴)绘制一个 1d 数组(x 轴),因此每个 x 值有多个 y 值。我想绘制一条最佳拟合直线(线性回归),而不仅仅是一条连接点的线。我怎样才能做到这一点???

所有其他示例似乎每个 x 值只有一个 y 值。当我使用'from sklearn.linear_model import LinearRegression'时,我得到的最佳拟合线与每个 x 值的 y 值一样多。

编辑:这是我尝试过的代码:

model = LinearRegression()
x_axis2 = np.arange(0,len(av_rsq3))
x_axis2 = x_axis2.reshape(-1,1)
model.fit(x_axis2, av_rsq3)
pt.figure()
pt.plot(x_axis2,av_rsq3, 'rx')
pt.plot(x_axis2, model.predict(x_axis2))

注意:x_axis2 是一维数组,av_rsq3 是二维数组。

4

3 回答 3

1

您只需将这些具有匹配 x 值的点添加为正常点,然后您可以添加一条最佳拟合线,如下所示:

import numpy as np
from numpy.polynomial.polynomial import polyfit
import matplotlib.pyplot as plt

x = np.array([1,2,3,4,5,6,6,6,7,7,8])
y = np.array([1,2,4,8,16,32,34,30,61,65,120])

# Fit with polyfit
b, m = polyfit(x, y, 1)

plt.plot(x, y, '.')
plt.plot(x, b + m * x, '-')
plt.show()

产生图形.
请注意,直线不适合我的示例数据,但我在编写它时没有考虑到这一点:) 使用 polyfit 您还可以更改拟合程度,以及获得梯度误差*和偏移量。

*(或其他多项式系数)

于 2018-10-29T16:41:50.960 回答
0

您需要做的是提供一对一的映射。点出现的顺序无关紧要。所以如果你有这样的东西

X:  [1,2,3,4]
Y1: [4,6,2,7]
Y2: [2,3,6,8]

你会得到这个

X: [1,2,3,4,1,2,3,4]
Y: [4,6,2,7,2,3,6,8]
于 2018-10-29T16:31:40.940 回答
0

如果您只想绘制 y 值和它们之间的平均线,这是可能的。从另一个答案借用虚拟数据:

x = [1,2,3,4]

y = [4,6,2,7]
y1 = [2,3,6,8]

plt.scatter(x,y)
plt.scatter(x,y1)
plt.plot(x,[((y[i]+y1[i])/2) for i in range(len(y))])

在此处输入图像描述

于 2018-10-29T16:48:09.053 回答