【问题标题】:Curve Fitting to a time series in the format 'datetime'?曲线拟合到“日期时间”格式的时间序列?
【发布时间】:2013-07-14 09:27:06
【问题描述】:

这是我的问题:polyfit 不采用日期时间值,因此我用mktime 转换了日期时间,产生多项式拟合工作

z4 = polyfit(d, y, 3) 
p4 = poly1d(z4)

然而,对于情节,我想要轴上的日期时间描述,但不知道如何做到这一点。你能帮帮我吗?

fig = plt.figure(1)
cx= fig.add_subplot(111) 

xx = linspace(0,  d[3], 100)
pylab.plot(d, y, '+', xx, p4(xx),'-g')
cx.plot(d, y,'+', color= 'b', label='blub')
plt.errorbar(d, y,
           yerr,
           marker='.',
           color='k',
           ecolor='b',
           markerfacecolor='b',
           label="series 1",
           capsize=0,
           linestyle='')

cx.grid()
cx.set_ylim(0,0.03)
plt.show()

其余代码:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import axis
from datetime import datetime
from numpy import *
import pylab
import time

我的前 4 个时间数据点

x = [datetime(1978, 7, 7), 
     datetime(1980, 9, 26), 
     datetime(1983, 8, 1), 
     datetime(1985,8,8)]

d=[]
for i in x:
    d.append(time.mktime(i.timetuple()))

我的前 4 个数据值

y = [0.00134328779552718,
     0.00155187668863844,
     0.0039431374327427,
     0.00780037563783297]

我计算的误差线标准差

yerr = [0.0000137547160254577,
        0.0000225670232594083,
        0.000105623642510075,
        0.00011343121508]

【问题讨论】:

    标签: python datetime curve-fitting mktime axis-labels


    【解决方案1】:

    使用关联的日期时间,而不是绘制日期数字。


    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.dates as mdates
    import datetime as DT
    import time
    
    dates = [DT.datetime(1978, 7, 7),
         DT.datetime(1980, 9, 26),
         DT.datetime(1983, 8, 1),
         DT.datetime(1985, 8, 8)]
    
    y = [0.00134328779552718,
         0.00155187668863844,
         0.0039431374327427,
         0.00780037563783297]
    
    
    yerr = [0.0000137547160254577,
            0.0000225670232594083,
            0.000105623642510075,
            0.00011343121508]
    
    x = mdates.date2num(dates)
    
    z4 = np.polyfit(x, y, 3)
    p4 = np.poly1d(z4)
    
    fig, cx = plt.subplots()
    
    xx = np.linspace(x.min(), x.max(), 100)
    dd = mdates.num2date(xx)
    
    cx.plot(dd, p4(xx), '-g')
    cx.plot(dates, y, '+', color='b', label='blub')
    cx.errorbar(dates, y,
                 yerr,
                 marker='.',
                 color='k',
                 ecolor='b',
                 markerfacecolor='b',
                 label="series 1",
                 capsize=0,
                 linestyle='')
    
    cx.grid()
    cx.set_ylim(0, 0.03)
    plt.show()
    

    产量

    请注意,在您的代码中,x 表示日期时间列表,d 表示数字。我决定扭转这一点:我使用dates 表示日期时间列表,使用x 表示数字。

    【讨论】:

    • 这就是我要找的 - 谢谢!如果你想对日期时间对象做一些有用的事情,我很惊讶 matplotlib 是必需的。日期时间中是否有与matplotlib.dates.date2num() 等效的功能?
    猜你喜欢
    • 2015-09-02
    • 1970-01-01
    • 2014-09-02
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    相关资源
    最近更新 更多