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

如何为Seaborn Heatmap设置日期刻度频率及指定显示日期

解决方案

核心问题说明

sns.heatmap的坐标轴默认采用分类索引而非连续时间轴,y轴位置对应的是DataFrame的整数行号,不是时间戳数值,因此mdates系列的日期定位器无法直接生效,这也是之前用YearLocator无效的根本原因。
你已经引入的AxTransformer类本质是建立了「日期数值」到「热图整数位置」的线性映射,完全可以满足自定义指定日期刻度的需求,只需调整日期生成规则即可。

具体修改方案

无需修改原有工具类,仅需调整set_date_ticks的调用参数,使用pandas的日期偏移量规则生成每年10月1日的日期序列即可:

f, ax = plt.subplots(figsize=(20,20))
ax = sns.heatmap(df, ax = ax)
# 仅需修改该行参数,freq='AS-OCT'代表生成每年10月1日的日期序列
set_date_ticks(ax, start_date='2000-10-01', end_date='2003-10-01', 
               axis='y', date_format='%Y-%m-%d', freq='AS-OCT')
plt.show()

扩展用法说明

  • 如果需要指定其他固定月日的年度刻度,比如每年2月10日,可将freq参数改为AS-FEB,并额外增加参数day=10
  • 如果需要自定义不规则的刻度日期,可直接构造目标日期列表传入,示例如下:
# 自定义指定要显示的日期
target_dates = pd.to_datetime(['2000-10-01', '2001-10-01', '2002-03-15', '2003-10-01'])
ax_transformer = AxTransformer(datetime_vals=True)
ax_transformer.fit(ax, axis='y')
ax.set_yticks(ax_transformer.transform(target_dates))
ax.set_yticklabels(target_dates.strftime('%Y-%m-%d'))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:15:02