Python如何循环生成日期时间序列用于matplotlib绘图
自动生成连续时间序列的高效实现方案
你不需要手动逐个录入datetime对象,以下两种方案都可以快速生成指定粒度、指定范围的时间序列,直接适配matplotlib的x轴输入要求:
方案1:基于Python标准库实现,无第三方依赖
不需要安装额外包,通过timedelta做时间步长累加即可,灵活度高:
- 先定义时间序列的起始、结束时间点
- 循环累加固定步长的时间差,直到到达结束时间
- 步长可以自由调整,支持小时、分钟、天等任意粒度
示例代码:
from datetime import datetime, timedelta # 定义时间范围 start_time = datetime(2022, 6, 21, 0) end_time = datetime(2022, 6, 25, 23) dates = [] current_time = start_time while current_time <= end_time: dates.append(current_time) current_time += timedelta(hours=1) # 步长设为1小时,改参数即可调整粒度
如果要生成一整周(168小时)的逐小时数据,不需要手动算结束日期,直接用end_time = start_time + timedelta(days=7)即可,自动生成刚好168个时间点。
方案2:用pandas.date_range一行生成,适合数据处理场景
做时序数据分析时更推荐这个方法,不需要手写循环,内置了非常丰富的时间粒度配置:
- 直接传入起止时间、时间粒度参数,一行代码生成完整序列
- 支持工作日、月初、月末、自定义间隔等特殊时间规则
- 输出结果可以直接转为Python原生datetime对象,适配matplotlib输入
示例代码:
import pandas as pd # freq='H'代表逐小时粒度,调整freq参数即可修改步长 dates = pd.date_range( start="2022-06-21 00:00:00", end="2022-06-25 23:00:00", freq="H" ).to_pydatetime()
常用freq参数参考:
15T:每15分钟2H:每2小时D:每天B:每个工作日
完整绘图示例
替换原来手动写dates列表的部分即可直接运行:
import matplotlib.pyplot as plt import pandas as pd # 生成逐小时时间序列 dates = pd.date_range(start="2022-06-21 00:00:00", end="2022-06-28 00:00:00", freq="H").to_pydatetime() # 自动匹配x轴长度生成y值,不需要手动数元素个数 y = list(range(len(dates))) plt.plot(dates, y) # 自动旋转x轴时间标签,避免文字重叠 plt.gcf().autofmt_xdate() plt.show()
内容的提问来源于stack exchange,提问作者hacks4life
相关产品推荐
相关产品推荐

