You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于matplotlib.dates.DateFormatter()与xticks()的绘图格式设置咨询

针对你的时间序列绘图需求,我整理了matplotlib.dates.DateFormatter()和xticks()的具体用法,结合你给出的交易数据场景一步步说明:


先确认数据处理的基础代码

首先确保你已经正确读取并转换了日期列,这部分代码可以参考:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

# 读取CSV文件(替换成你的实际文件名)
df = pd.read_csv('trade_data.csv')
# 将trade_dt转换为datetime类型,这是后续日期格式化的前提
df['trade_dt'] = pd.to_datetime(df['trade_dt'])

一、使用matplotlib.dates.DateFormatter()格式化X轴日期

DateFormatter的核心作用是自定义X轴上日期的显示样式,比如你想把日期显示成2011/02/28、2011-02或者Feb 2011这类格式,都可以通过它实现。

用法步骤:

  1. 创建DateFormatter实例,传入符合Python strftime规则的格式字符串
  2. 获取绘图的Axes对象,调用ax.xaxis.set_major_formatter()将格式化器应用到X轴主刻度

示例代码:

fig, ax = plt.subplots(figsize=(10, 6))
# 绘制IC值的折线图
ax.plot(df['trade_dt'], df['IC'], marker='o', label='IC')

# 创建日期格式化器,这里用和你原始数据一致的%Y/%m/%d格式
date_formatter = mdates.DateFormatter('%Y/%m/%d')
# 应用到X轴主刻度
ax.xaxis.set_major_formatter(date_formatter)

# 旋转X轴标签避免重叠,这一步常和格式化器配合使用
plt.xticks(rotation=45)
plt.legend()
plt.tight_layout()
plt.show()

常用日期格式字符串:

  • %Y:4位数年份(如2011)
  • %m:2位数月份(如02、03)
  • %d:2位数日期(如28、31)
  • %b:缩写月份名(如Feb、Mar)
  • %B:完整月份名(如February、March)

二、使用xticks()/ax.set_xticks()控制X轴刻度

xticks()主要用来手动指定X轴要显示哪些刻度,或者调整刻度标签的显示样式(比如旋转、字体大小),有两种常用场景:

场景1:手动指定要显示的刻度日期

如果不想显示所有日期(比如你的数据是月度的,只想显示季度末刻度),可以先筛选目标日期,再传入set_xticks():

fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(df['trade_dt'], df['IC'], marker='o')

# 筛选季度末日期(3、6、9、12月的最后一天)
quarterly_dates = df[df['trade_dt'].dt.month.isin([3,6,9,12])]['trade_dt']
# 设置X轴刻度为这些筛选后的日期
ax.set_xticks(quarterly_dates)

# 配合DateFormatter格式化显示为年月格式
date_formatter = mdates.DateFormatter('%Y/%m')
ax.xaxis.set_major_formatter(date_formatter)

plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

场景2:调整刻度标签的显示样式

最常用的就是解决X轴标签重叠问题,通过旋转标签角度实现,也可以调整字体大小:

# 方式1:使用plt.xticks()
plt.xticks(rotation=60, fontsize=10)

# 方式2:使用Axes对象的set_xticklabels()(更灵活)
ax.set_xticklabels(ax.get_xticklabels(), rotation=60, fontsize=10)

三、完整综合示例(IC和pValue双轴图)

把两者结合起来,绘制带日期格式化的双轴图:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

# 数据读取与转换
df = pd.read_csv('trade_data.csv')
df['trade_dt'] = pd.to_datetime(df['trade_dt'])

fig, ax1 = plt.subplots(figsize=(12, 6))

# 绘制IC值主轴
color = 'tab:blue'
ax1.set_xlabel('Trade Date')
ax1.set_ylabel('IC', color=color)
ax1.plot(df['trade_dt'], df['IC'], color=color, marker='o')
ax1.tick_params(axis='y', labelcolor=color)

# 设置X轴日期格式和刻度
date_formatter = mdates.DateFormatter('%Y/%m/%d')
ax1.xaxis.set_major_formatter(date_formatter)
ax1.set_xticks(df['trade_dt'])
plt.xticks(rotation=60)

# 绘制pValue次轴
ax2 = ax1.twinx()
color = 'tab:red'
ax2.set_ylabel('pValue', color=color)
ax2.plot(df['trade_dt'], df['pValue'], color=color, marker='s')
ax2.tick_params(axis='y', labelcolor=color)

plt.title('IC & pValue Trend')
plt.tight_layout()
plt.show()

内容的提问来源于stack exchange,提问作者xxyao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:13:17