matplotlib在x轴上的日期之间进行vlines

时间:2017-04-26 18:20:45

标签: python pandas matplotlib

我已经根据正确绘制的pandas数据框创建了一个matplotlib图。我正在图表中包含垂直线。我能够通过使用这个来做到这一点:

permitdate = 'June 15, 2017'

ax.axvline(permitdate, linewidth=2)

允许日期可以是我想要绘制的任意日期。

我遇到的问题是索引(即图表中的x-asix)是以月为基础的:

DatetimeIndex(['2017-04-30', '2017-05-31', '2017-06-30', '2017-07-31',
               '2017-08-31', '2017-09-30', '2017-10-31', '2017-11-30',
               '2017-12-31'],
              dtype='datetime64[ns]', name='Date', freq=None)

当我尝试绘制vlines图表时,它会将该行直接放在日期所在的月份。

例如,上面的许可日期显示在a轴上的6月x-tick之上。有没有办法在6月和7月的x-ticks之间显示它,它代表它在几个月之间的实际位置而不是直接超过月x轴点?

编辑:

受熊猫文档启发的一个例子:

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np

ts = pd.Series(np.random.randn(10), index=pd.date_range('1/1/2000', periods=10, freq='m'))
ts = ts.cumsum()


df = pd.DataFrame(np.random.randn(10, 4), index=ts.index, columns=list('ABCD'))


df = df.cumsum()

ax = df.plot()
designdate = 'July 15, 2000'
ax.axvline(designdate, linewidth=2)

谢谢,

伊万

1 个答案:

答案 0 :(得分:1)

使用resampleinterpolate

一起获取每日频率
ax = df.resample('D').interpolate().plot()
designdate = 'July 15, 2000'
ax.axvline(pd.to_datetime(designdate), linewidth=2)

enter image description here