Matplotlib从文件读取数据 自定义X轴日期为月-日格式
Matplotlib 子图X轴日期自定义为月-日格式方案
你之前的日期解析逻辑方向是对的,只是缺少X轴刻度的显示格式配置环节——不需要修改解析后的原始时间数据,只要通过Matplotlib自带的日期处理工具做显示层的格式映射即可,具体实现步骤如下:
- 先补全导入依赖,除datetime外需要引入Matplotlib的日期处理模块:
import datetime as dt import matplotlib.pyplot as plt import matplotlib.dates as mdates # 若用pandas读取CSV可额外导入,日期解析会更简便 import pandas as pd
- 修正你原有解析代码的语法问题(原代码末尾缺失右括号),注意解析后保留完整datetime对象即可,不需要提前转date类型丢失时间精度:
# date为从CSV读取得到的原始日期字符串列表,格式为「年-月-日 时:分」 x = [dt.datetime.strptime(d, '%Y-%m-%d %H:%M') for d in date]
- 绘图完成后,给对应子图的X轴配置显示格式,多子图场景下给每个轴对象单独应用配置即可:
# 示例:创建2行1列的子图 fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 8), sharex=True) # 正常完成你的绘图逻辑,例如 ax1.plot(x, y1), ax2.bar(x, y2) # 核心配置:指定X轴刻度显示为「月-日」格式 x_axis_format = mdates.DateFormatter('%m-%d') ax1.xaxis.set_major_formatter(x_axis_format) ax2.xaxis.set_major_formatter(x_axis_format) # 可选优化:刻度过密时可设置刻度间隔,例如每2天显示一个刻度 ax1.xaxis.set_major_locator(mdates.DayLocator(interval=2)) # 自动旋转X轴日期标签,避免文字重叠 fig.autofmt_xdate() plt.tight_layout() plt.show()
注意事项
- 不要在日期解析阶段直接截断字符串去掉年份,保留完整datetime对象才能保证时序绘图的坐标准确性,格式调整只需要控制显示层逻辑即可
- 如果用pandas读取CSV,可直接在
pd.read_csv()中传入parse_dates=['你的日期列名']参数自动完成时间解析,后续X轴格式配置方法完全一致 - 如果时间跨度更小、需要显示更细粒度的时间,只要把
DateFormatter的格式字符串改成你需要的形式即可,比如'%m-%d %H:%M'就能显示带小时分钟的月日时间
内容的提问来源于stack exchange,提问作者Oriol Villanova Llorens
相关产品推荐
相关产品推荐

