我试图用Excel数据(两列,其中一列用于轴x
,另一列用于轴y
)创建图形,并显示中位数,均值和趋势线(线性回归)。
问题出在最后一个组件上。中值和均值显示为从散点图中最高点到最低点的直线,但是趋势线的长度绝对是随机的。
取决于第二列的值,有时它很短并且几乎是水平的,但是对于一组数据,它开始于绘图的中间某处,然后下降到图形的最低点下方,从而直观地扩展了绘图及其看起来很糟糕。
我的问题是:如何限制显示线性回归的图中线的长度?
以下是之前和之后的屏幕截图:
添加后:np.clip
我已经很好地切割了该线的下部,但是并没有将其完全限制在某个点以下,我只是限制了它的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()
只需在最低点的水平处剪切该线即可。如果数据集是相反的话,它也是最高的。