x轴为时间对象时如何减少Matplotlib绘图的xticks标签数量
Matplotlib 时间轴设置5-6个x刻度的实现方法
你的代码未对x轴刻度数量做主动控制,matplotlib默认自动生成的刻度密度过高,才会出现标签重叠挤在一起的问题,按以下修改即可实现需求:
- 首先将读取到的
Time列转为pandas标准datetime格式,避免日期刻度工具失效 - 调用
matplotlib.dates内置的自动刻度定位器,直接限制最大刻度数量为6,即可自动均匀生成5-6个不重叠的刻度 - 搭配统一的日期格式化工具,避免刻度标签显示格式混乱
修改后的完整可运行代码:
import numpy as np import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as md plt.rcParams["figure.figsize"] = [7.00, 3.50] plt.rcParams["figure.autolayout"] = True columns = ["Time", "SO2_inlet", "SO2_outlet"] df = pd.read_csv("../code_thesis/0713_.25g.csv", usecols=columns) # 转换时间列为标准日期格式 df["Time"] = pd.to_datetime(df["Time"]) print("Contents in csv file:\n", df) fig, ax = plt.subplots() ax.plot(df.Time, df.SO2_inlet, label="SO2_inlet") ax.plot(df.Time, df.SO2_outlet, label="SO2_outlet") # 配置x轴:最多显示6个刻度,自动均匀分布 x_locator = md.AutoDateLocator(maxticks=6) ax.xaxis.set_major_locator(x_locator) # 配置刻度标签格式,这里设为「小时:分钟」,可按需改为%m-%d %H:%M 显示月日 x_formatter = md.DateFormatter("%H:%M") ax.xaxis.set_major_formatter(x_formatter) plt.legend() plt.show()
可选调整方案
如果你需要固定刻度间隔(比如每间隔30分钟/1小时打一个刻度),可以把AutoDateLocator替换为对应粒度的定位器,手动设置间隔凑够5-6个刻度即可,示例:
- 每20分钟一个刻度:
md.MinuteLocator(interval=20) - 每1小时一个刻度:
md.HourLocator(interval=1)
原绘图效果参考:
内容的提问来源于stack exchange,提问作者Jacob Vasquez
相关产品推荐
相关产品推荐

