python - 曲线拟合到格式为 'datetime' 的时间序列?

标签 python datetime curve-fitting mktime axis-labels

这是我的问题: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]

最佳答案

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


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()

产量

enter image description here

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

关于python - 曲线拟合到格式为 'datetime' 的时间序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17638137/

相关文章:

python - 如何在 geopandas map 上添加 "North Arrow"

python 将字符串时间转换为sql日期时间格式

python - 在 Python 中将总和拟合到数据

python 不同长度的日期并提取年份信息

python - 记录到具有不同设置的两个文件

javascript - AWS Lambda Node Js JSON 未定义

datetime - 为什么Data.Time.Clock提供DiffTime和NominalDiffTime?

sql - 如何将此 T-SQL 代码转换为 PostgreSQL/plpgsql

python - 如何用Python确定拟合参数的不确定性?

python - scipy.polyfit(x, y, 100) 将是 100 阶多项式,但 matplotlib.pyplot.legend 显示 53?