Run*_*ean 5 python smooth date matplotlib pandas
我试图平滑一条曲线,但由于 x 轴值是日期,我在这样做时遇到了很大的麻烦。假设我们有一个如下的数据框
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
%matplotlib inline
startDate = '2015-05-15'
endDate = '2015-12-5'
index = pd.date_range(startDate, endDate)
data = np.random.normal(0, 1, size=len(index))
cols = ['value']
df = pd.DataFrame(data, index=index, columns=cols)
Run Code Online (Sandbox Code Playgroud)
然后我们绘制数据
fig, axs = plt.subplots(1,1, figsize=(18,5))
x = df.index
y = df.value
axs.plot(x, y)
fig.show()
Run Code Online (Sandbox Code Playgroud)
我们得到
现在为了平滑这条线,已经有一些有用的 staekoverflow 问题,例如:
但是对于我的示例,我似乎无法使用一些代码来执行此操作,有什么建议吗?
您可以使用随附的插值功能pandas。因为您的数据框已经为每个索引提供了一个值,所以您可以使用更稀疏的索引填充它,并用NaN值填充每个以前不存在的索引。然后,在选择了许多可用的插值方法之一后,对数据进行插值和绘图:
index_hourly = pd.date_range(startDate, endDate, freq='1H')
df_smooth = df.reindex(index=index_hourly).interpolate('cubic')
df_smooth = df_smooth.rename(columns={'value':'smooth'})
df_smooth.plot(ax=axs, alpha=0.7)
df.plot(ax=axs, alpha=0.7)
fig.show()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3940 次 |
| 最近记录: |