使用 Python 的 matplotlib 在 x 轴上绘制日期

新手上路,请多包涵

我正在尝试根据日期绘制信息。我有一个格式为“01/02/1991”的日期列表。

我通过执行以下操作转换了它们:

 x = parser.parse(date).strftime('%Y%m%d'))

这给出了 19910102

然后我尝试使用 num2date

 import matplotlib.dates as dates
new_x = dates.num2date(x)

绘图:

 plt.plot_date(new_x, other_data, fmt="bo", tz=None, xdate=True)

但我得到一个错误。它说“ValueError:年份超出范围”。有什么解决办法吗?

原文由 irl_irl 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 557
2 个回答

正如@KyssTao 所说, help(dates.num2date) 表示 x 必须是一个浮点数,给出自 0001-01-01 以来的天数加一。因此, 19910102 不是 1991 年 1 月 2 日,因为如果您从 0001-01-01 开始计算 19910101 天,您将在 54513 年或类似年份得到一些东西(除以 365.25,a 中的天数年)。

使用 datestr2num 代替(参见 help(dates.datestr2num) ):

 new_x = dates.datestr2num(date) # where date is '01/02/1991'

原文由 mathematical.coffee 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以更简单地使用 plot() 而不是 plot_date() 来做到这一点。

首先,将您的字符串转换为 Python datetime.date 的实例:

 import datetime as dt

dates = ['01/02/1991','01/03/1991','01/04/1991']
x = [dt.datetime.strptime(d,'%m/%d/%Y').date() for d in dates]
y = range(len(x)) # many thanks to Kyss Tao for setting me straight here

然后绘制:

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

plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%m/%d/%Y'))
plt.gca().xaxis.set_major_locator(mdates.DayLocator())
plt.plot(x,y)
plt.gcf().autofmt_xdate()

结果:

在此处输入图像描述

原文由 mechanical_meat 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题