如何在Matplotlib图表X轴显示不规则Timestamp刻度?
解决方法:用不规则时间戳作为X轴标签绘制x-y曲线
原代码问题分析
- 直接设置
set_xticklabels后未匹配对应刻度位置,后续的DateFormatter和MaxNLocator会导致标签与刻度错位 - 未处理数据中的
inf值,可能引发绘图异常
修正后的代码
import matplotlib.pyplot as plt import pandas as pd # 清理含inf的行,避免绘图报错 abc = abc[~abc['y'].isin([float('inf'), float('-inf')])] fig, ax = plt.subplots(nrows=1, ncols=1, sharex=False, dpi=400) ax.plot(abc['x'], abc['y'], linewidth=1, color='black') # 固定X轴刻度位置为x列的所有数值,确保每个数据点对应一个时间标签 ax.set_xticks(abc['x']) # 将刻度标签替换为格式化后的时间戳 ax.set_xticklabels(abc['endTime'].dt.strftime('%H:%M:%S')) # 调整标签显示样式 ax.tick_params(axis='both', which='major', labelsize=6) for label in ax.get_xticklabels(): label.set_ha('right') label.set_rotation(45) label.set_fontsize(5) # 自动调整布局,防止标签被截断 plt.tight_layout() plt.show()
关键说明
set_xticks(abc['x']):强制X轴刻度与x列的每个数值对应,保证时间标签和数据点一一匹配dt.strftime('%H:%M:%S'):将Timestamp类型的时间转为指定格式的字符串,避免时间显示过长- 若时间标签过于密集,可通过切片筛选显示,比如
abc['x'][::2]和abc['endTime'][::2],每隔2个数据点显示一个标签
内容的提问来源于stack exchange,提问作者user1769197
相关产品推荐
相关产品推荐

