我试图使图形线条平滑,但是由于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)
然后我们绘制数据
fig, axs = plt.subplots(1,1, figsize=(18,5))
x = df.index
y = df.value
axs.plot(x, y)
fig.show()
我们得到
现在,为了使这条线平滑,已经有一些有用的staekoverflow问题,例如:
> Generating smooth line graph using matplotlib,
> Plot smooth line with PyPlot
> Creating numpy linspace out of datetime
但是我似乎无法为我的示例获得一些代码来做到这一点,有什么建议吗?
解决方法:
您可以使用熊猫附带的插值功能.因为您的数据框已经具有每个索引的值,所以您可以使用稀疏的索引填充它,并使用NaN值填充每个先前不存在的索引.然后,在选择多种插值methods available中的一种之后,插值并绘制数据:
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()