2014-01-26 31 views
0

我有一個2列表,首先是日期(日期時間對象),其次是這些日期的一些值。 當我創建一個簡單的情節:如何在matplotlib中平滑基於日期的數據?

plt.plot_date(x=dates, y=dur, fmt='r-') 

我得到一個非常醜陋的形象like this

我如何平滑這條線?我想推斷,但沒有找到一個簡單的功能。在Scipy中有非常困難的工具,但我不明白我必須添加什麼外推數據。

+0

如果使用['pandas'(http://pandas.pydata.org/),你可以做一個滾動平均。 – BrenBarn

+2

它看起來像你的數據沒有排序 - 我可能會從'data = zip(dates,dur)'開始,然後'data = sorted(data,key = lambda j:j [0])''。 – colcarroll

回答

1

你可以把它順利通過sp.polyfit

enter image description here

代碼:

import scipy as sp 
import numpy as np 
import matplotlib.pyplot as plt 

# sampledata 
x = np.arange(199) 
r = np.random.rand(100) 
y = np.convolve(r, r) 

# plot sampledata 
plt.plot(x, y, color='grey') 

# smoothen sampledata using a 50 degree polynomial 
p = sp.polyfit(x, y, deg=50) 
y_ = sp.polyval(p, x) 

# plot smoothened data 
plt.plot(x, y_, color='r', linewidth=2) 

plt.show()