由于您使用的是 pandas,因此您可以执行以下操作:
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
这里是一个来自 DataFrame 的列的示例,带有DatetimeIndex
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 内部日期处理的某个范围的值。
稍后,当绘图完成后,将刻度标签替换为实际日期。
或者,调用.autofmt_xdate() 使标签可读。