【发布时间】:2021-06-01 22:23:23
【问题描述】:
我正在研究一个应该简单地在 y 轴上绘制时间和在 x 轴上绘制日期的图形。 我的输入是一个日期字符串,我已经通过 timedate 将其转换为日期。
我也设法得到了这个数字,但在格式化轴时遇到了困难。我找到了为 matplotlib.dates 打勾标签的示例,但不适用于我的 datetime 类型的对象。目标是在 y 轴 (0, 3, 6, 9....24) 上每 3 小时有一次滴答声,在 x 轴上每整年和每个月都有一次滴答声。
输入是一个列表,其中包含“快照”类型的对象,属性 snapshot.date 中的日期为字符串类型,包括日期和时间(例如,'21.02.2021 08:47')。字符串格式化为日期时间。当它们使用 strftime 分隔为日期和时间时,不幸的是它们被转换为字符串。所以我用 strptime 将它们转换回日期/时间。有没有更好的方法来保持日期格式和单独的时间和日期?
代码如下所示
fig, (ax1) = plt.subplots(1, 1, figsize=(7.5, 5)) # Create a figure and an axes.
datetime_object_list = [datetime.strptime(snapshot.date, '%d.%m.%Y %H:%M') for snapshot in snapshots if snapshot.stcd == stcd_ID]
date_string_list = [datetime.strftime(datetime_object, '%d %m %y') for datetime_object in datetime_object_list]
date_object_list = [datetime.strptime(date_string, '%d %m %y').date() for date_string in date_string_list]
time_string_list = [datetime.strftime(datetime_object, '%H:%M') for datetime_object in datetime_object_list]
time_object_list = [datetime.strptime(time_string, '%H:%M').time() for time_string in time_string_list]
# plot sensors
ax1.plot_date(date_object_list, time_object_list, xdate=True, ydate=True, marker='o', color='C1')
# define limits of axes
y_min = datetime.strptime('00:00', '%H:%M').time()
y_max = datetime.strptime('23:59', '%H:%M').time()
ax1.set_ylim(y_min, y_max)
到目前为止,输出如下所示: enter image description here
如果有人有想法,那就太好了! 非常感谢和BR 克劳斯
【问题讨论】:
标签: python datetime plot formatting axes