【问题标题】:Google generated and matplotlib graphs are differentGoogle 生成的图和 matplotlib 的图不同
【发布时间】:2019-03-13 22:00:13
【问题描述】:

我正在尝试使用以下代码找到最适合的曲线:

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 上绘制,结果如下:

Results plotted on matplotlib

但是,在 Google 图表上绘制的相同方程式如下所示:

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的地图是对的?

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    这是因为默认情况下 google graphs 使用 log 到 base 10,但 numpy 默认使用 log 到 base e

    通过使用 numpy 显式使用 log 到 base 10,我们可以重新创建 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()
    

    这给了我以下情节:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-08
      • 2015-12-17
      • 2016-08-30
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多