为什么要按年粒度进行注解?

Why annual granularity of annotation?

提问人:Michael Stern 提问时间:11/18/2023 最后编辑:Trenton McKinneyMichael Stern 更新时间:11/19/2023 访问量:43

问:

我从 Excel 导入一个简单的数据框。七个日期,12/2021 - 12/2027,每个日期相隔一年,每个日期都与一个数字相关联。我想添加一个注释(将实际历史值与预测数字分开的垂直线)和文本来明确这一点。

df.plot()

#annotation
plt.axvline(pd.to_datetime('2023-6-01'))
plt.text(pd.to_datetime('2022-06-01'), 20**6, 'actual')
plt.text(pd.to_datetime('2023-06-01'), 20**6, 'forecast')

plt.show()

系统会将我的展示位置四舍五入到最接近的年末。因此,使用上面的代码,所有三个展示位置的设置都比我希望的要早六个月。

frustrating graph

如何让线条和文本出现在指定的月份?

蟒蛇 matplotlib

评论

0赞 Tim Roberts 11/18/2023
你是如何宣布你的X轴的?看起来这些数据都只在年份边界上。
0赞 Michael Stern 11/18/2023
是的,数据是以年份为界的。matplotlib 是否只允许在有数据的日期放置注释?这似乎是一个奇怪的限制。
0赞 Tim Roberts 11/18/2023
因为它确实如此。您正在注释图形数据,而图形数据仅存在于整年。有一些方法可以在不依赖轴的情况下绘制线条。axvline

答:

0赞 Michael Stern 11/18/2023 #1

该问题已通过使用子图来解决。所以把上面的代码换成

figure, ax = plt.subplots() # need both of those; subplots is a tuple
ax.plot(df) 

#annotation
ax.axvline(pd.to_datetime('2022-6-01'))
ax.text(pd.to_datetime('2021-06-01'), 20**6, 'actual')
ax.text(pd.to_datetime('2022-06-01'), 20**6, 'forecast')

plt.show()

并且注释可以自由放置。