在一个图中用指数方程拟合多个独立值
Fitting multiple independent values with an exponential equation in one plot
我一直在尝试拟合具有多个独立值的曲线。
对于单个图,我能够绘制但是对于多个值,我卡住了。
这是我的数据集:
我在 csv 文件中有数据集,
您可以在此处找到 csv:
https://github.com/Laudarisd/csv_data
这是我的单图代码:
# fit a line to the economic data
from numpy import sin
from numpy import sqrt
from numpy import arange
from pandas import read_csv
from scipy.optimize import curve_fit
from matplotlib import pyplot
import numpy as np
import pandas as pd
import csv
from numpy import savetxt
from numpy import asarray
# define the fitting function
def func(x, a, c):
return a - 1/2 * np.exp(-(x - 1)/c)
csv = np.genfromtxt ('./10.csv', delimiter=",")
x = csv[1:,1]
y = csv[1:,-1]
popt, pcov = curve_fit(func, x, y)
r2 = round((1 - sum((func(x, *popt) - y) ** 2) / sum((y - np.mean(y)) ** 2)),4)
print("R^2:", r2)
a, c = popt
plt.figure()
plt.plot(x, y, 'ko', label="Raw data")
plt.plot(x, func(x, *popt), 'r-', alpha=.60, label="Fitted Curve")
plt.plot(x, y, color='none', label= "c = %.2f" % c)
plt.xlabel("x label")
plt.ylabel("y label")
plt.legend()
plt.show()
详细:
- csv 有 3 列,但我在拟合曲线时只需要 2 列(第二列和第三列)。
- 基于第二列,我试图用上面代码中提到的等式拟合第三列
- 在所有csv中,第二列是相同的。我用于 'x label' 的第三列(准确性)与我用于 'y label'.
的不同
- 所以我想单独提取所有精度并在单个图中拟合基于
def fun(x, a, c)
的曲线。
所以我将有一个情节:
- 10.csv - 拟合曲线
- 20.csv - 拟合曲线
- 30.csv - 拟合曲线
- 40.csv - 拟合曲线
- 50.csv - 拟合曲线
希望问题得到解决。
任何帮助,将不胜感激。
谢谢
你想实现这个目标吗?
# fit a line to the economic data
from numpy import sin
from numpy import sqrt
from numpy import arange
from pandas import read_csv
from scipy.optimize import curve_fit
from matplotlib import pyplot
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import csv
from numpy import savetxt
from numpy import asarray
colors_list = ["black", "green", "red", "purple", "blue"]
types = ['ko', 'go', 'ro', 'mo', 'bo']
# define the fitting function
def func(x, a, c):
return a - 1/2 * np.exp(-(x - 1)/c)
plt.figure()
for i, v in enumerate(["10", "20", "30", "40", "50"]):
csv = np.genfromtxt ('./'+v+'.csv', delimiter=",")
x = csv[1:,1]
y = csv[1:,-1]
popt, pcov = curve_fit(func, x, y)
r2 = round((1 - sum((func(x, *popt) - y) ** 2) / sum((y - np.mean(y)) ** 2)),4)
print("R^2:", r2)
a, c = popt
plt.plot(x, y, types[i], label="Raw data_"+v)
plt.plot(x, func(x, *popt), 'r-', alpha=.60, label="Fitted Curve_" + v, color=colors_list[i])
plt.plot(x, y, color='none', label= "c = %.2f" % c)
plt.xlabel("x label")
plt.ylabel("y label")
plt.tight_layout()
plt.legend()
plt.show()
我一直在尝试拟合具有多个独立值的曲线。
对于单个图,我能够绘制但是对于多个值,我卡住了。
这是我的数据集:
我在 csv 文件中有数据集,
您可以在此处找到 csv: https://github.com/Laudarisd/csv_data
这是我的单图代码:
# fit a line to the economic data
from numpy import sin
from numpy import sqrt
from numpy import arange
from pandas import read_csv
from scipy.optimize import curve_fit
from matplotlib import pyplot
import numpy as np
import pandas as pd
import csv
from numpy import savetxt
from numpy import asarray
# define the fitting function
def func(x, a, c):
return a - 1/2 * np.exp(-(x - 1)/c)
csv = np.genfromtxt ('./10.csv', delimiter=",")
x = csv[1:,1]
y = csv[1:,-1]
popt, pcov = curve_fit(func, x, y)
r2 = round((1 - sum((func(x, *popt) - y) ** 2) / sum((y - np.mean(y)) ** 2)),4)
print("R^2:", r2)
a, c = popt
plt.figure()
plt.plot(x, y, 'ko', label="Raw data")
plt.plot(x, func(x, *popt), 'r-', alpha=.60, label="Fitted Curve")
plt.plot(x, y, color='none', label= "c = %.2f" % c)
plt.xlabel("x label")
plt.ylabel("y label")
plt.legend()
plt.show()
详细:
- csv 有 3 列,但我在拟合曲线时只需要 2 列(第二列和第三列)。
- 基于第二列,我试图用上面代码中提到的等式拟合第三列
- 在所有csv中,第二列是相同的。我用于 'x label' 的第三列(准确性)与我用于 'y label'. 的不同
- 所以我想单独提取所有精度并在单个图中拟合基于
def fun(x, a, c)
的曲线。
所以我将有一个情节:
- 10.csv - 拟合曲线
- 20.csv - 拟合曲线
- 30.csv - 拟合曲线
- 40.csv - 拟合曲线
- 50.csv - 拟合曲线
希望问题得到解决。 任何帮助,将不胜感激。 谢谢
你想实现这个目标吗?
# fit a line to the economic data
from numpy import sin
from numpy import sqrt
from numpy import arange
from pandas import read_csv
from scipy.optimize import curve_fit
from matplotlib import pyplot
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import csv
from numpy import savetxt
from numpy import asarray
colors_list = ["black", "green", "red", "purple", "blue"]
types = ['ko', 'go', 'ro', 'mo', 'bo']
# define the fitting function
def func(x, a, c):
return a - 1/2 * np.exp(-(x - 1)/c)
plt.figure()
for i, v in enumerate(["10", "20", "30", "40", "50"]):
csv = np.genfromtxt ('./'+v+'.csv', delimiter=",")
x = csv[1:,1]
y = csv[1:,-1]
popt, pcov = curve_fit(func, x, y)
r2 = round((1 - sum((func(x, *popt) - y) ** 2) / sum((y - np.mean(y)) ** 2)),4)
print("R^2:", r2)
a, c = popt
plt.plot(x, y, types[i], label="Raw data_"+v)
plt.plot(x, func(x, *popt), 'r-', alpha=.60, label="Fitted Curve_" + v, color=colors_list[i])
plt.plot(x, y, color='none', label= "c = %.2f" % c)
plt.xlabel("x label")
plt.ylabel("y label")
plt.tight_layout()
plt.legend()
plt.show()