Если вы преобразуете свои данные, как показано ниже, вы можете построить линию для этого
xNew=[0, 0, 0, 1, 1, 1, 2, 2, 2]
y =np.concatenate([y1,y2,y3])
Эта линия будет y = mx + c, где в этом подгонке x является индексом набора данных.
Таким образом, мы можем сказать, например, y1 = m * 0 + c, y2 = m * 1 + c et c
, вы можете использовать это для регулировки y1, y2 , y3, затем подгоните линии и начертите, как вы делали
import numpy as np
import matplotlib.pyplot as plt
x = np.array([1, 2, 3])
y1 = np.array([60.8, 60.5, 60.5])
y2 = np.array([377.6, 376.8, 377.7])
y3 = np.array([695.4, 695.8, 695.5])
xNew=[0, 0, 0, 1, 1, 1, 2, 2, 2]
y =np.concatenate([y1,y2,y3])
fit = np.polyfit(xNew,y, 1)
y1New = [fit[0]*0 + fit[1]] *3
y2New = [fit[0]*1 + fit[1]] *3
y3New = [fit[0]*2 + fit[1]] *3
fig = plt.figure(num="LIVE", figsize=(14, 6), dpi=80, facecolor='w', edgecolor='k')
plt.plot(x,y1,'*',x,y2,'*',x,y3,'*')
for line in y1New,y2New,y3New:
plt.plot(x, line, color='r')
Этот ответ будет иметь такой же интервал, что и средний интервал ваших 3 подгонок, но он поможет вам найти точные линии, а не только интервал, используйте этот код, чтобы увидеть разницу (я настроил y3 [2], чтобы показать это здесь)
import numpy as np
import matplotlib.pyplot as plt
x = np.array([1, 2, 3])
y1 = np.array([60.8, 60.5, 60.5])
y2 = np.array([377.6, 376.8, 377.7])
y3 = np.array([695.4, 695.8, 800])
xNew=[0, 0, 0, 1, 1, 1, 2, 2, 2]
y =np.concatenate([y1,y2,y3])
fit = np.polyfit(xNew,y, 1)
y1New = [fit[0]*0 + fit[1]] *3
y2New = [fit[0]*1 + fit[1]] *3
y3New = [fit[0]*2 + fit[1]] *3
fig = plt.figure(num="LIVE", figsize=(14, 6), dpi=80, facecolor='w', edgecolor='k')
plt.plot(x,y1,'*',x,y2,'*',x,y3,'*')
for line in y1New,y2New,y3New:
plt.plot(x, line, color='r')
fit_1 = np.polyfit(x,y1,0)
fit_2 = np.polyfit(x,y2,0)
fit_3 = np.polyfit(x,y3,0)
for line in fit_1,fit_2,fit_3:
plt.axhline(line, color='b')
print(float((fit_3 - fit_1)/2))
print(fit[0])