【发布时间】:2021-12-18 17:38:32
【问题描述】:
我正在尝试在 python 中拟合我的曲线。
举个简单的例子,我能适应。
但是,我想在拟合参数值以下分离一条具有不同颜色或形状的曲线。
#This is my x and y array
from numpy import sqrt
import pandas as pd
from scipy.optimize import curve_fit
from matplotlib import pyplot
import numpy as np
import csv
x = [2, 1.95, 1.9, 1.85, 1.8, 1.75, 1.7, 1.65, 1.6, 1.55, 1.5, 1.45, 1.4, 1.35
1.3, 1.25, 1.2, 1.15, 1.1, 1.05, 1.01]
y = [1, 1, 1, 1, 0.99, 0.938, 0.9, 0.857, 0.762, 0.686, 0.59, 0.529, 0.509, 0.47, 0.462, 0.452, 0.452, 0.452, 0.457, 0.43,0.424]
print(len(x))
print(len(y))
def func(x, m, n):
return 1 - 1/2 * np.exp(-(x - m)/(n))
params, covs = curve_fit(func, x, y)
print("params: ", params)
print("covariance: ", covs)
for idx, value in enumerate(x):
params, _ = curve_fit(func, x, y)
m, n = params[0], params[1]
if value >= m:
yfit1 = 1 - 1/2 * np.exp(-(x - m)/(n))
else:
#params, _ = curve_fit(func, x, y)
#r_t, n = params[0], params[1]
yfit2 = 1 - 1/2 * np.exp(-(x - m)/(n))
print(value)
plt.plot(x, y, 'bo', linestyle ='solid', marker=">", label="original")
plt.plot(x, yfit1,label="m >= %.3f"%m)
plt.plot(x, yfit2,'ko', marker='>', label="x < m")
plt.xlabel('x')
plt.ylabel('y')
plt.legend(loc='best', fancybox=True, shadow=True)
plt.grid(False)
plt.show()
输出
params: [1.19707919 0.52674861]
# So this gives 1.197 for m.
当我看到我的 x 数组时,我有几个值小于 m 的值(m=1.197 from params)。
所以我想以不同的方式绘制它们(颜色或大小),这样我就可以有两条不同的风格曲线,所有 x 都大于 m,其余 x 小于 m。
我试图通过创建两个方程来给出循环,但我无法得到任何区别。似乎在拟合线上绘制了相同的图表。
我能得到一些帮助吗? 任何帮助将不胜感激。
谢谢。
【问题讨论】:
标签: python python-3.x python-2.7 scikit-learn curve-fitting