如何在x轴绘制hh:mm:ss格式时间并设置小时级刻度避免重叠
解决方案
依赖导入
import matplotlib.pyplot as plt import matplotlib.dates as mdates from datetime import datetime
步骤1:转换时间格式
直接将字符串格式的时间戳批量转换为datetime对象即可,10万条数据的转换效率足够,无需额外优化:times = [datetime.strptime(t_str, "%H:%M:%S") for t_str in time]
注:新版matplotlib(≥3.3)已经原生支持datetime类型作为x轴输入,不需要手动调用
date2num转换为数值格式。如果你的时间跨天,可在strptime格式中补充日期字段即可。
步骤2:配置x轴刻度并绘图
直接使用matplotlib内置的时间定位器和格式化器实现固定间隔的刻度显示:
# 创建画布 fig, ax = plt.subplots(figsize=(12, 6)) # 绘制测量值曲线 ax.plot(times, 你的测量值数组, linewidth=0.8) # 配置x轴主刻度:每1小时显示一个刻度,需要2小时间隔就将interval改为2 ax.xaxis.set_major_locator(mdates.HourLocator(interval=1)) # 配置x轴刻度显示格式为 时:分:秒 ax.xaxis.set_major_formatter(mdates.DateFormatter("%H:%M:%S")) # 自动旋转刻度标签避免重叠 plt.xticks(rotation=45, ha="right") # 可选:强制限定x轴范围为你的数据时间区间,避免空白 ax.set_xlim(times[0], times[-1]) # 自动调整布局避免标签被截断 plt.tight_layout() plt.show()
可选优化建议
- 10万条原始数据直接绘图可能出现曲线过密、渲染卡顿的问题,可先按时间下采样(比如取每10秒的平均值)后再绘图,展示效果更清晰
- 如果需要添加次要刻度(比如15分钟间隔的小刻度),可调用
ax.xaxis.set_minor_locator(mdates.MinuteLocator(interval=15))实现
内容的提问来源于stack exchange,提问作者jopeto
相关产品推荐
相关产品推荐

