既然你正在使用熊猫,你可以这样做:
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()
哪个应该产生这样的情节:
这里的技巧是在调用.plot方法时用一些不触发matplotlib内部日期处理的值替换日期.
之后,在绘图完成后,将ticklabels替换为实际日期.(可选)调用.autofmt_xdate()以使标签可读.