matplotlib plot_date()在指定日期添加垂直线

时间:2016-01-12 11:41:55

标签: date python-3.x matplotlib plot

我的数据存储为pandas数据帧。我使用matplotlib中的plot_date()函数创建了一个日期(对象格式)与百分位数(int64格式)的图表,并希望在预先指定的日期添加一些垂直线。

我已设法在预先指定的日期添加点标记,但似乎无法找到使它们成为垂直线的方法。

我在SO / SE上找到了关于如何向plot()添加垂直线的各种答案,但是在将我的数据转换为plot()可以使用的格式时遇到了问题,因此为什么我使用了plot_date ()。

示例数据:

date       percentile
2012-05-30  3
2014-11-25  60
2012-06-15  38
2013-07-18  16

我绘制图表的代码如下:

x_data = data["date"]
y_data = data["percentile"]

plt.figure()
plt.plot()

#create a scatter chart of dates vs. percentile
plt.plot_date(x = x_data, y = y_data)

#now add a marker at prespecified dates - ideally this would be a vertical line
plt.plot_date(x = '2012-09-21', y = 0)

plt.savefig("percentile_plot.png")
plt.close()

不幸的是,我无法提供当前输出的图像,因为代码位于没有Web访问权限的终端上。

我非常感谢任何帮助 - 也就我如何提出问题而言,因为我对SO / SE不熟悉。

谢谢。

2 个答案:

答案 0 :(得分:5)

在MatPlotLib 1.4.3中,这有效:

import datetime as dt

plt.axvline(dt.datetime(2012, 9, 21))

传递字符串样式的日期(2012-09-21)不起作用,因为MPL不知道这是一个日期。无论用于加载文件的代码是什么,都可能隐含地从字符串中创建datetime个对象,这就是调用调用的原因。

此外,在MPL 1.4.3中,我不需要致电plt.plot_date(data['date'], ...),只要plt.plot(data['date'], ...)列是{{1}的列,只需调用data['date']即可。对象。

祝你好运。

答案 1 :(得分:2)

使用熊猫。这是一个示例,还可以转换为时间戳以防万一:

 df = pd.DataFrame({
    'date':[
        '2012-05-30',
        '2014-11-25',
        '2012-06-15',
        '2013-07-18',
    ],
    'percentile':[3,60,38,16]
})
df['date'] = df['date'].apply(pd.Timestamp)
df=df.set_index('date')
df.plot(marker='o')
plt.axvline(pd.Timestamp('2013-09-21'),color='r')

以下是输出:

output