2013-07-14 15 views
8

Oto mój problem: polyfit nie przyjmować wartości datetime, abym przekształcone datetime z mktime produkcji wielomian dopasowanie działaDopasowanie krzywej do szeregu czasowego w formacie "datetime"?

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

dla fabuły jednak chciałbym się z opisem datetime na osi i nie zrobił” t # dowiedzieć się, jak to zrobić. Możesz mi pomóc?

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

reszta kodu:

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

moje pierwsze punkty danych 4 Czas

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

moje pierwsze 4 Dane wartości

y = [0.00134328779552718, 
    0.00155187668863844, 
    0.0039431374327427, 
    0.00780037563783297] 

moje obliczone odchylenia standardowe dla błędu bary

yerr = [0.0000137547160254577, 
     0.0000225670232594083, 
     0.000105623642510075, 
     0.00011343121508] 

Odpowiedz

10

Zamiast wykreślać zbiory danych, należy użyć powiązanych dat.


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

daje

enter image description here

Uwaga w kodzie, x reprezentowane listę datetimes i d reprezentowane liczb. Postanowiłem to odwrócić: używam dates dla listy datetimes, a x do reprezentowania liczb.

+0

Właśnie zrobiłeś mój dzień !!! :) Dziękuję bardzo!! – Corins