2013-07-14 4 views
8

Вот моя проблема: polyfit не принимает даты-время значения, так что я преобразовал DateTime с mktime производством полиномиальными подходит работеКривая Привязка к временному ряду в формате 'datetime'?

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

Для сюжета, однако, я хотел бы описание DATETIME на оси и Жду» t # выяснить вне как сделать. Вы можете мне помочь?

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] 

ответ

10

Вместо того, чтобы печатать данные, используйте связанные даты.


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 представлен список DateTimes и d представлены номера. Я решил изменить это: я использую dates для списка datetimes, и x для представления чисел.

+0

Вы только что сделали мой день !!! :) Огромное спасибо!! – Corins

Смежные вопросы