簡體   English   中英

如何在 Python 中進行指數曲線擬合?

[英]How to do exponential curve fitting in Python?

我試圖解決這個代碼。 我不明白為什么生成的紅線不在各自的點圖中。 我有一個指數 function 評估每個。 誰能幫我解決這個代碼? 我想為每個圖形分別生成一個正確的回歸點和回歸線。 謝謝你們。

import pandas as pd
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import numpy as np
#data
data_complete=[[92.5215,55.0136,40.5884,24.1340,14.3502],
               [108.5836,64.5642,47.6347,28.3238,16.8414],
               [123.9908,73.7254,54.3937,32.3427,19.2311],
               [143.9338,85.5835,63.1425,37.5448,22.3242],
               [158.8782,94.4696,69.6985,41.4430,24.6421]]

columns_values=[10,20,30,60,120]
rows_values=[5,10,20,50,100]
#generate matrix(pandas)
matrix_values=pd.DataFrame(data_complete,index=rows_values, columns=columns_values)

def func(x,a,b):
    return a*(x**b)

for m in range(0,len(rows_values)):
    
    plt.plot(columns_values,matrix_values.iloc[m],'bo', label='point')
    plt.title("Graphic - "+"Col = "+str(rows_values[m]), fontdict={'fontweight':'bold', 'fontsize':10})
    
    popt, pcov=curve_fit(func,columns_values,matrix_values.iloc[m])
    print(popt)
    
    xFit = np.arange(120.0,3.0, -8) 
    
    fig, axes=plt.subplots()
    
    axes.plot(xFit, func(xFit,*popt),'r',label='Parameters: a=%5.3f, b=%5.3f' % tuple(popt)) #plotea solo los puntos gracias a ('o')
    
    plt.xlabel('axis x')
    plt.ylabel('axis y')
    plt.legend()

plt.show()

我相信可能有一種更簡單的方法可以將一條線擬合到一組值。 Numpy 包含一些可以更輕松、更快速地完成此操作的方法。 這是一個教程的鏈接:

https://www.geeksforgeeks.org/how-to-do-exponential-and-logarithmic-curve-fitting-in-python/

請提供就業建議。 . .

這只是順序問題。 我想這可以如願:

import pandas as pd
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import numpy as np
#data
data_complete=[[92.5215,55.0136,40.5884,24.1340,14.3502],
               [108.5836,64.5642,47.6347,28.3238,16.8414],
               [123.9908,73.7254,54.3937,32.3427,19.2311],
               [143.9338,85.5835,63.1425,37.5448,22.3242],
               [158.8782,94.4696,69.6985,41.4430,24.6421]]

columns_values=[10,20,30,60,120]
rows_values=[5,10,20,50,100]
#generate matrix(pandas)
matrix_values=pd.DataFrame(data_complete,index=rows_values, columns=columns_values)

def func(x,a,b):
    return a*(x**b)

for m in range(0,len(rows_values)):
    
    fig, axes=plt.subplots()
    axes.plot(columns_values,matrix_values.iloc[m],'bo', label='point')
    axes.set_title("Graphic - "+"Col = "+str(rows_values[m]), fontdict={'fontweight':'bold', 'fontsize':10})
    
    popt, pcov=curve_fit(func,columns_values,matrix_values.iloc[m])
    print(popt)
    
    xFit = np.arange(120.0,3.0, -8) 
    
    
    axes.plot(xFit, func(xFit,*popt),'r',label='Parameters: a=%5.3f, b=%5.3f' % tuple(popt)) #plotea solo los puntos gracias a ('o')
    
    axes.set_xlabel('axis x')
    axes.set_ylabel('axis y')
    axes.legend()

plt.show()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM