获得最佳拟合以及其方程式

时间:2019-09-02 18:38:53

标签: python linux ubuntu plot

因此,我有一个数据文件,已从中提取数据并制作了图表,但似乎无法弄清楚如何将最佳拟合与最佳拟合方程式相加。我总是收到一条错误消息,说“不能将序列与numpy.float64类型的非整数重复”

我尝试将b,m变量更改为浮点数,但这没有用。我尝试过更改我知道是浮点数的变量,但仍然没有用。

import matplotlib #plotpackage
matplotlib.use('TkAgg') #graphicspackage
import matplotlib.pyplot as plt #might be a redunancy
import csv

from statistics import mean
import numpy as np
from numpy.polynomial.polynomial import polyfit



abscissa = []   #coordinate systems
ordinate = []

with open('/home/jacob/Downloads/data.v3.txt', 'r') as datafile:
    plots = csv.reader(datafile)
    firstline = datafile.readline()
    for line in datafile:
        x, y, dy = line.split()
        abscissa.append(float(x))
        ordinate.append(float(y))

b, m = np.polyfit(abscissa, ordinate, 1)

plt.plot(abscissa, ordinate, label='Data line')
plt.plot(abscissa, b + m * abscissa, '-')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Data')
plt.legend()
plt.show()

我应该看到我的情节,上面有一条最合适的线。一旦我知道这条线,就可以轻松地将其作为等式调用并打印出来。

1 个答案:

答案 0 :(得分:0)

有些地方可能会导致您需要检查一些问题。

  1. polyfit将返回斜率,然后截取-因此您将bm颠倒了。
  2. abscissa是一个列表,因此您将无法像数组一样执行算术运算。您可以将其转换为数组。 这可能是您出错的原因

尝试这样的事情:

abscissa = np.array(abscissa)
m, b = np.polyfit(abscissa, ordinate, 1)

plt.plot(abscissa, ordinate, label='Data line')
plt.plot(abscissa, b + m * abscissa, '-')
...