matplotlib绘制datetime格式时间数据时如何设置x轴1小时间隔刻度
问题解决方法
核心问题有两个:一是你的time列大概率为字符串(object)类型,matplotlib无法将其识别为时间序列,导致你设置的HourLocator不生效,x轴会把所有行的时间都作为独立分类刻度渲染,自然会拥挤重叠;二是画布宽度不足,无法容纳24个小时刻度的展示。
修改步骤如下:
- 第一步:将
time列转换为datetime类型,让matplotlib可以识别时间格式
import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as mdates # 转换时间列格式,%f对应毫秒部分 data['time'] = pd.to_datetime(data['time'], format='%H:%M:%S.%f')
- 第二步:调整画布尺寸,给x轴刻度留出足够的横向展示空间,同时手动限定x轴范围为0点到23点
# 调整画布宽度为16英寸,高度6英寸,可根据展示需要调整尺寸 fig, ax = plt.subplots(figsize=(16, 6)) ax.plot(data['time'], data['temp'], label='实时温度') ax.plot(data['time'], data['temp_mean'], color='red', label='平均温度') # 设置x轴定位规则和显示格式 xformatter = mdates.DateFormatter('%H:%M') xlocator = mdates.HourLocator(interval=1) ax.xaxis.set_major_locator(xlocator) ax.xaxis.set_major_formatter(xformatter) # 手动限定x轴范围为当天0点到23点 start_time = pd.to_datetime('00:00:00', format='%H:%M:%S') end_time = pd.to_datetime('23:00:00', format='%H:%M:%S') ax.set_xlim(start_time, end_time) # 调整x轴刻度样式,右对齐避免标签偏移 ax.tick_params(axis='x', rotation=45, labelsize=10) # 自动适配x轴标签边距 fig.autofmt_xdate(rotation=45, ha='right') # 可选:添加图例、自动调整整体边距避免标签被裁切 ax.legend() plt.tight_layout() plt.show()
- 额外优化方案:如果调整后还是觉得刻度拥挤,可将
HourLocator的间隔参数调为2小时,或者进一步放大figsize的宽度参数。
内容的提问来源于stack exchange,提问作者vgb_backup
相关产品推荐
相关产品推荐

