Curve Snap to time series in 'datetime' format?

Here is my problem: polyfit does not accept datetime values, so I converted datetime with mktime , creating work with a polynomial approach

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

For the plot, however, I would like to describe the date and time on the axis and not # figure out how to do it. 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 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] 
+10
python datetime axis-labels curve-fitting mktime
source share
1 answer

Instead of printing data, use related dates.


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

gives

enter image description here

Note that in your code x is a list of datetimes, and d is represented by numbers. I decided to change this: I use dates for a list of datetimes and x to represent numbers.

+11
source share

All Articles