【发布时间】:2021-10-03 16:48:20
【问题描述】:
我想在 Python 中使用 Matplotlib 为 一个 散点图绘制 2 条趋势线,但我不知道如何。该图应该类似于这个target plot(来自here,图2)。
我设法在散点图here 上绘制了一条趋势线,但不知道如何绘制另一条趋势。
下面是我到目前为止所尝试的:
这对于我绘制的其他参数证明是可以的,但对于这种情况却不是这样,这使我得出结论,它不太正确。
X = vO2.reshape(-1, 1)
Y = ve.reshape(-1, 1)
linear_regressor = LinearRegression()
linear_regressor.fit(X, Y)
y_pred = linear_regressor.predict(X)
x_pred = linear_regressor.predict(Y)
plt.scatter(X, Y)
plt.plot(X, y_pred, '-*',label="O2")
plt.plot(x_pred, Y, '-*',label="vent")
plt.xlabel("VO2 (L/min)")
plt.ylabel("VE (L/min)")
plt.show()
还有
z1 = np.polyfit(vO2, ve, 1)
p1 = np.poly1d(z1)
z2 = np.polyfit(ve, vO2, 1)
p2 = np.poly1d(z2)
plt.scatter(vO2, ref_vent, label='original')
plt.plot(vO2, p1(vO2), label='trendline')
plt.plot(ve, p2(ve), label='trendline')
plt.show()
它看起来也不像目标情节。
我不知道如何继续。提前致谢!
示例数据集: vo2 = [1.673925 1.9015125 1.981775 2.112875 2.1112625 2.086375 2.13475 2.1777 2.176975 2.1857125 2.258925 2.2718375 2.3381 2.3330875 2.353725 2.4879625 2.448275 2.4829875 2.5084375 2.511275 2.5511 2.5678375 2.5844625 2.6101875 2.6457375 2.6602125 2.6939875 2.7210625 2.720475 2.767025 2.751375 2.7771875 2.776025 2.7319875 2.564 2.3977625 2.4459125 2.42965 2.401275 2.387175 2.3544375]
ve = [ 3.93125 7.1975 9.04375 14.06125 14.11875 13.24375 14.6625 15.3625 15.2 15.035 17.7625 17.955 19.2675 19.875 21.1575 22.9825 23.75625 23.30875 25.9925 25.6775 27.33875 27.7775 27.9625 29.35 31.86125 32.2425 33.7575 34.69125 36.20125 38.6325 39.4425 42.085 45.17 47.18 42.295 37.5125 38.84375 37.4775 34.20375 33.18 32.67708333]
【问题讨论】:
-
这让我想起了滴定曲线。您可以通过二阶导数找到转折点。阅读这篇文章:newbedev.com/how-to-apply-piecewise-linear-fit-in-python
-
你能提供示例数据吗?
-
我用一个例子编辑了帖子
标签: python numpy matplotlib plot trendline