#python #matplotlib
#python #matplotlib
Вопрос:
Я пытаюсь найти кривую наилучшего соответствия, используя следующий код:
popt, pcov = curve_fit(lambda t,a,b: a b*np.log(t), data_list, noise_data, absolute_sigma=True)
Возвращаемые параметры [-51.90326506, 13.77241918], т.Е.:
y = -51.90326507 13.77241918*log(x)
Результаты, построенные в MatPlotLib, выглядят следующим образом:
Результаты, построенные на matplotlib
Однако одно и то же уравнение, отображенное на графиках Google, выглядит следующим образом:
Результаты, построенные с помощью инструмента Google graph
Я использую приведенный ниже код для генерации кривой наилучшего соответствия:
popt, pcov = curve_fit(lambda t,a,b: a b*np.log(t), data_list, noise_data, absolute_sigma=True)
curvex=np.linspace(min(data_list), max(data_list))
p1 = popt[0]
p2 = popt[1]
curvey=(lambda x,c,m: m*np.log(x) c)(curvex,p1,p2)
# plot data
plt.plot(data_list,noise_data,'x',label = 'Xsaved')
plt.plot(curvex,curvey,'r', linewidth=2, label = 'Model')
Почему существует это несоответствие? Правильно ли использовать python или карты Google?
Ответ №1:
Это потому, что по умолчанию Google graphs использует log для базы 10
, но numpy использует log для базы e
по умолчанию.
Явно используя log to the base 10
с помощью numpy, мы можем воссоздать график, предоставленный нам Google:
import matplotlib.pyplot as plt
import numpy as np
a = -51.9
b = 13.8
x = np.linspace(0, 175000)
fig, ax = plt.subplots(1, 2, figsize=[10, 4])
# Use log to the base 10 to create google's plot
ax[0].plot(x, a b*np.log10(x))
ax[0].set_title('Base 10 log (google default)')
# Log to the base e is the numpy default
ax[1].plot(x, a b*np.log(x))
ax[1].set_title('Base e log (numpy default)')
fig.tight_layout()
Это дало мне следующий график: