亲爱的Stackoverflow用户,
如何使用python模块scipy显示趋势线的等式? 考虑到可能无法轻易做到这一点。如何计算斜率和交点,以便我自己编程?
图1:测量尚未知的噪音颜色
import pandas as pd
import matplotlib.pyplot as plt
import TISTNplot as tn
import numpy as np
from scipy import optimize
path = "removed for privacy reasons"
metingen = ['A', 'B', 'C', 'D', 'E', 'F']
"""
Gebruikte kleurcodes behorende bij de geluidskleur
"""
blauw = '#0066ff' # 3dB/octaaf
grijs = '#cbcbcb' # a-weging
roze = '#ff66cc' # -3dB/octaaf
bruin = '#663300' # -6dB/octaaf
violet = '#9900ff' # 6dB/octaaf
wit = '#aa0000' # 0dB/octaaf
zwart = '#000000'
kleur = [blauw, roze, bruin, grijs, violet, wit]
i = 0
meting = metingen[i]
df = pd.read_csv(path+meting+'.txt', sep='\t', header=None, names=['freq', 'intense'], decimal=",")
x = df['freq']
y = df['intense']
x1 = x[df['freq'] < 11][df['freq'] > 8]
y1 = y[df['freq'] < 11][df['freq'] > 8]
print(x1)
plt.plot(x, y, '.', label="Bestand: %s" % metingen[i], color=kleur[i], ms=2)
plt.plot(x1, y1, '.', label="Bestand: %s" % metingen[i], color=kleur[i], ms=5)
"""
Functie voor de trendlijn.
In dit geval een lineaire lijn.
"""
def theorie(x, a, b):
""" x moet een np.array zijn """
return a*x+b
params = [0, 2] # begin waarde voor de fit
params, covariance = optimize.curve_fit(theorie, x1, y1, params)
plt.plot(x, theorie(x, *params), '-b', label='trendlijn', color='red')
"""
Zorgt voor de correcte opmaak
"""
tn.PRECISION_X = 5
tn.PRECISION_Y = 5
tn.fix_axis(plt.gca())
plt.tight_layout()
plt.legend(loc=0)
#plt.xlim(8, 13)
plt.grid()
plt.show()
您正在看到读取数据文件的代码。数据在8-11 x轴范围之外具有很大的不确定性。这就是趋势线适合该区域的原因。
我很乐意收到有关此问题的任何反馈。
亲切的问候
答案 0 :(得分:0)
您可以使用np.polyfit()
将数据拟合到一行(请参阅here)。线性趋势线将是二次多项式(y = mx + b)。这将返回一个带有多项式系数的numpy数组,您可以使用np.linspace()
和np.poly1d()
在matplotlib中创建一个numpy数组和绘图,就像您绘制上面的其他两行一样。提供的链接中有更多详细信息。
答案 1 :(得分:0)
问题已经解决了!
params, covariance = optimize.curve_fit(lineair, x1, y1, params)
params返回斜率和交点。