Matplotlib中的时间序列图注释

2024-06-17 13:39:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个日期(datetime对象)的索引数组(x)和一个实际值(y:债券价格)的数组。正在执行(在iPython中):

plot(x,y)

生成一个非常精细的时间序列图,其中x轴标有日期。到目前为止没问题。但我想在某些日期添加文本。例如,在2009年10月31日,我希望显示文本“Event 1”,其中有一个箭头指向该日期的y值。

我已经阅读了有关text()annotate()的Matplotlib文档,但没有任何结果。它只涉及标准编号的x轴,我无法推断如何在我的问题上使用这些示例。

谢谢你


Tags: 对象text文本eventdatetimeplotipython时间
1条回答
网友
1楼 · 发布于 2024-06-17 13:39:07

Matplotlib对日期使用内部浮点格式。

您只需要将日期转换为该格式(使用matplotlib.dates.date2nummatplotlib.dates.datestr2num),然后像往常一样使用annotate

作为一个有点过于花哨的例子:

import datetime as dt
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

x = [dt.datetime(2009, 05, 01), dt.datetime(2010, 06, 01), 
     dt.datetime(2011, 04, 01), dt.datetime(2012, 06, 01)]
y = [1, 3, 2, 5]

fig, ax = plt.subplots()
ax.plot_date(x, y, linestyle='--')

ax.annotate('Test', (mdates.date2num(x[1]), y[1]), xytext=(15, 15), 
            textcoords='offset points', arrowprops=dict(arrowstyle='-|>'))

fig.autofmt_xdate()
plt.show()

enter image description here

相关问题 更多 >