如何显示用scipy模块制作的线性趋势线方程-python

如何显示用scipy模块制作的线性趋势线方程-python,python,numpy,matplotlib,scipy,Python,Numpy,Matplotlib,Scipy,亲爱的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"

亲爱的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()

将熊猫作为pd导入
将matplotlib.pyplot作为plt导入
导入TISTNLOT作为tn
将numpy作为np导入
从scipy导入优化
path=“出于隐私原因删除”
梅廷根=['A'、'B'、'C'、'D'、'E'、'F']
"""
Gebruikte kleurcodes behorende bij de geluidskleur
"""
blauw='#0066ff'#3dB/octaaf
grijs='#cbcbcb'#a-weging
罗兹=“#ff66cc”#-3dB/octaaf
bruin='#663300'#-6dB/octaaf
紫罗兰色='#9900ff'#6dB/octaaf
wit='#aa0000'#0dB/octaaf
zwart='#000000'
克莱尔=[blauw,roze,bruin,grijs,violet,wit]
i=0
梅廷=梅廷根[i]
df=pd.read_csv(path+meting+'.txt',sep='\t',header=None,names=['freq','sensitive'],decimal=“,”)
x=df['freq']
y=df[‘强烈的’]
x1=x[df['freq']<11][df['freq']>8]
y1=y[df['freq']<11][df['freq']>8]
打印(x1)
plt.plot(x,y,,,,,,,,,,label=“最佳和:%s”%metingen[i],color=kleur[i],ms=2)
plt.plot(x1,y1,,,,,,,,,label=“Bestand:%s”%metingen[i],color=kleur[i],ms=5)
"""
趋势功能。
在这一点上。
"""
定义理论(x,a,b):
“”“x moet een np.array zijn”“”
返回a*x+b
参数=[0,2]#开始拟合
参数,协方差=优化曲线拟合(理论,x1,y1,参数)
plt.plot(x,理论(x,*参数),'-b',label='trendlijn',color='red')
"""
佐尔格特·沃德·奥普马克
"""
tn.精度_X=5
tn.精度_Y=5
固定轴(plt.gca())
plt.紧_布局()
plt.图例(loc=0)
#plt.xlim(8,13)
plt.grid()
plt.show()
您将看到读取数据文件的代码。数据在8-11 x轴范围外有很大的不确定性。这就是为什么趋势线适合该区域

我很乐意收到关于这个问题的任何反馈


您可以使用
np.polyfit()
将数据拟合到一行(请参阅)。线性趋势线为二次多项式(y=mx+b)。这将返回一个带有多项式系数的numpy数组,您可以使用
np.linspace()
np.poly1d()
创建一个numpy数组并在matplotlib中绘制,就像绘制上面的其他两行一样。有关更多详细信息,请参阅提供的链接。

问题已解决

params, covariance = optimize.curve_fit(lineair, x1, y1, params)

params返回斜率和交点。

首先,我想说,我感谢您的回答。然而,这并不是我问题的答案。很抱歉。让我问一个澄清的问题:你想自己编写多项式拟合代码吗?仅供参考,如果你不想自己编写,这里有一个我建议的解决方案示例哦!我理解你的问题!对不起,没有仔细阅读。如果按照建议使用
np.polyfit()
,则会得到
m
b
。对于这些,您可以使用
plt.text()
向绘图中添加字符串。就像
plt.text(2,0.65,'y={}x+{}格式(m,b)
。查看更多关于绘图的文本示例。好的,太好了!scipy也可以这样做吗?因为我们的教授鼓励我们在这个函数中使用numpy。