我有一个有几年的时间序列'值得的数据,例如:
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts = ts.cumsum()
ts.plot()
我还有两个额外的数组:让我们调用第一个
dates = [pd.datetime("2000-12-01"), pd.datetime("2001-01-03")]
第二个
labels = ["My birthday", "My dad's birthday"]
labels [i]包含date [i]的标签。我想要做的是在时间序列图中显示它们,以便识别它们。一种可能的可视化方法是在x轴上显示日期,从那里开始绘制一条垂直线,并在图例(带颜色编码)或线旁边的某处标记。
最终结果不应与此有太大不同:
答案 0 :(得分:6)
首先在pandas和matplotlib API之间切换会让人感到困惑。
解决方案:获取当前轴,然后使用标准matplotlib API进行注释。这让你开始:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
ts = pd.Series(np.random.randn(1000),
index=pd.date_range('1/1/2000',
periods=1000))
ts = ts.cumsum()
ts.plot()
label_list = [
(pd.to_datetime("2001-05-01"), 'My\nbirthday', 'r'),
(pd.to_datetime("2001-10-16"), "Dad's\nbirthday", 'b')
]
ax = plt.gca()
for date_point, label, clr in label_list:
plt.axvline(x=date_point, color=clr)
plt.text(date_point, ax.get_ylim()[1]-4, label,
horizontalalignment='center',
verticalalignment='center',
color=clr,
bbox=dict(facecolor='white', alpha=0.9))
plt.show()
这会产生下面的图像,您需要考虑将titles和text labels and their bounding boxes修改为轴对象: