曲线拟合到形式'datetime'中的时间序列? [英] Curve Fitting to a time series in the formate 'datetime'?
问题描述
这是我的问题: polyfit
不采用datetime值,因此我将日期时间转换为 mktime
多项式拟合工作
z4 = polyfit(d,y,3)
p4 = poly1d(z4)
然而,对于情节,我希望在轴上的datetime描述,没有找出如何做那。你可以帮助我吗?
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
进口时间
我的前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时间
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 (日期)
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
$ p
$ p $ img src =https://i.stack.imgur.com/X0VVJ.pngalt =在此输入图像描述>
请注意您的代码 x
表示数据列表,而 d
表示数字。我已经决定扭转:我使用日期
来获取数据列表,而 x
来表示数字。
Here is my problem: polyfit
does not take datetime values, so that I converted datetime with mktime
producing the polynomial fit works
z4 = polyfit(d, y, 3)
p4 = poly1d(z4)
For the plot however, I would like the datetime description on the axis and didn't # figure out how to do that. Can you help me?
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()
rest of the code:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import axis
from datetime import datetime
from numpy import *
import pylab
import time
my first 4 time data points
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()))
my first 4 data values
y = [0.00134328779552718,
0.00155187668863844,
0.0039431374327427,
0.00780037563783297]
my calculated standard deviations for error bars
yerr = [0.0000137547160254577,
0.0000225670232594083,
0.000105623642510075,
0.00011343121508]
解决方案 Instead of plotting datenums, use the associated datetimes.
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()
yields
Note in your code, x
represented a list of datetimes, and d
represented numbers. I've decided to reverse that: I use dates
for a list of datetimes, and x
to represent numbers.
这篇关于曲线拟合到形式'datetime'中的时间序列?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!