Google生成的图和matplotlib图是不同的

2024-07-02 13:41:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图使用以下代码找到一条最佳拟合曲线:

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*对数(x)

绘制在MatPlotLib上,结果如下所示:

Results plotted on matplotlib

然而,谷歌图表上绘制的相同方程式如下:

Results plotted on Google's graph tool

我使用下面的代码生成最佳拟合曲线:

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的地图是正确的


Tags: lambdalogdataplotnp曲线sigmalist
1条回答
网友
1楼 · 发布于 2024-07-02 13:41:07

这是因为默认情况下google graphs使用log to the base10,而numpy使用log to the basee作为默认值

通过显式地将log to the base10与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

相关问题 更多 >