Сгенерированные Google и графики matplotlib отличаются - PullRequest
1 голос
/ 13 марта 2019

Я пытаюсь найти кривую наилучшего соответствия, используя следующий код:

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

Я использую приведенный ниже код для создания кривой наилучшего соответствия:

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 Ответ

1 голос
/ 13 марта 2019

Это потому, что по умолчанию графики Google используют журнал для базы 10, но numpy использует журнал для базы e по умолчанию.

За счет явного использования журнала для базы 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()

Это дало мне следующий сюжет:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...