ann*_*vic 7 plot date matplotlib python-3.x
我的数据存储为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
Run Code Online (Sandbox Code Playgroud)
我绘制图表的代码如下:
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()
Run Code Online (Sandbox Code Playgroud)
遗憾的是,我无法提供当前输出的图像,因为代码位于没有Web访问权限的终端上.
非常感谢任何帮助 - 也就我如何提出问题而言,因为我对SO/SE很新.
谢谢.
ntg*_*ntg 11
使用熊猫。这是一个示例,为了以防万一,也转换为时间戳:
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')
Run Code Online (Sandbox Code Playgroud)
这是输出:
在MatPlotLib 1.4.3中,此方法有效:
import datetime as dt
plt.axvline(dt.datetime(2012, 9, 21))
Run Code Online (Sandbox Code Playgroud)
传递字符串式的日期(2012-09-21)不起作用,因为MPL不知道这是一个日期。无论使用什么代码来加载文件,都可能datetime在字符串中隐式创建对象,这就是为什么plot调用起作用的原因。
同样,在MPL 1.4.3中,我不需要调用plt.plot_date(data['date'], ...),plt.plot(data['date'], ...)只要该data['date']列是datetime对象的列,调用对我来说就行得通。
祝好运。
| 归档时间: |
|
| 查看次数: |
6161 次 |
| 最近记录: |