删除缺失值的插值时间序列图

时间:2016-04-07 09:53:34

标签: python pandas matplotlib plot time-series

我试图绘制时间序列数据,但我遇到了一些问题。

我正在使用此代码:

from matplotlib import pyplot as plt
plt.figure('Fig')
plt.plot(data.index,data.Colum,'g', linewidth=2.0,label='Data')

我明白了: enter image description here

但我不想在缺失值之间进行插值!

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

由于您使用的是熊猫,您可以这样做:

import pandas as pd
import matplotlib.pyplot as plt

pd.np.random.seed(1234)
idx = pd.date_range(end=datetime.today().date(), periods=10, freq='D')
vals = pd.Series(pd.np.random.randint(1, 10, size=idx.size), index=idx)
vals.iloc[4:8] = pd.np.nan
print vals

以下是带有DatetimeIndex

的DataFrame中的列的示例
2016-03-29    4.0
2016-03-30    7.0
2016-03-31    6.0
2016-04-01    5.0
2016-04-02    NaN
2016-04-03    NaN
2016-04-04    NaN
2016-04-05    NaN
2016-04-06    9.0
2016-04-07    1.0
Freq: D, dtype: float64

要绘制没有数据为NaN的日期,您可以执行以下操作:

fig, ax = plt.subplots()
ax.plot(range(vals.dropna().size), vals.dropna())
ax.set_xticklabels(vals.dropna().index.date.tolist());
fig.autofmt_xdate()

哪个应该产生这样的情节:

enter image description here

这里的技巧是在调用.plot方法时用一些不触发matplotlib内部日期处理的值替换日期。

稍后,当绘图完成后,将ticklabels替换为实际日期。 (可选)调用.autofmt_xdate()以使标签可读。