如何限制线性回归图上直线的长度?

2024-09-30 16:27:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Excel数据创建一个图表(两列,一列用于axisx,另一列用于axisy),并显示中位数、平均值和趋势线(线性回归)。你知道吗

问题出在最后一个部件上。中位数和平均值在散点图上显示为从最高点到最低点的直线,然而,趋势线的长度是绝对随机的。你知道吗

根据第2列的值,有时它很短,几乎是水平的,但是对于一组数据,它从绘图的中间开始,然后下降到图形上的最低点以下,从视觉上延伸绘图,看起来很糟糕。你知道吗

我的问题是:如何限制线性回归图上直线的长度?你知道吗

以下是之前和之后的截图:

添加后:np.夹你知道吗

我已经很好地切割了线的下半部分,但是没有完全限制在某个点以下,我只是限制了它的y值,在这个y值下它变成了水平线。这是通过限制一个函数的值来实现的,它显示了线性回归趋势线的y值,但我不知道如何对x值也这样做。你知道吗

colors = np.where(x<reasonablemin,'k',np.where(x>reasonablemax,'k','y'))
plt.title(plottitle)
ax = plt.axes()
plt.gca().invert_yaxis()
ax.scatter(x, y, c=colors) 
finalx = [x for x in x if ((x < reasonablemax) & (x > reasonablemin))]
mask = (x[1:-1] > reasonablemax)
x[1:-1][mask] = np.nan
mask = (x[1:-1] < reasonablemin)
x[1:-1][mask] = np.nan
clearedagain = cleared.dropna()
print(clearedagain)
x = cleared[parameter]
y = cleared['Depth']
xcleared = clearedagain[parameter]
ycleared = clearedagain['Depth']
x = x.values.reshape(len(x), 1)
y = y.values.reshape(len(y), 1)
xcleared = xcleared.values.reshape(len(xcleared), 1)
ycleared = ycleared.values.reshape(len(ycleared), 1)
model = LinearRegression()
model.fit(xcleared, ycleared)
x_linearregression = np.linspace(0, reasonablemax)
y_linearregression = model.predict(x_linearregression[:, np.newaxis])
print(y_linearregression)
minimum = min(ycleared)
maximum = max(ycleared)
np.clip(y_linearregression, minimum, maximum, out=y_linearregression)
print(y_linearregression)
linear_regression_line = ax.plot(x_linearregression, y_linearregression, 
label='Trendline', linestyle='dotted')
plt.ylim(max(ycleared)+1,min(ycleared-1))
ax.set_xlabel(xlabel)
ax.set_ylabel(ylabel)
ax.axis('tight')
plt.show()

把那条线剪到最低点。如果数据集正好相反的话,也是最高的。你知道吗


Tags: 数据lennpplt线性maskax趋势