You need to enable JavaScript to run this app. Python 如何将不同年份间的x轴区间等分为12段实现月份分区
优惠活动
大模型
产品
解决方案
定价
更多

Python 如何将不同年份间的x轴区间等分为12段实现月份分区

Python 时间散点图x轴按年度均分12段的实现方案

核心实现思路

不需要改动你已有的散点绘制、色条配置、y轴范围设置、参考线、高亮区间的现有逻辑,只需要替换matplotlib默认的时间轴自动生成规则,手动控制x轴的刻度定位,即可实现相邻年份的x轴空间平均拆为12个分段、不显示具体月份名称的效果。

落地代码修改步骤

第一步:补全依赖导入

先确认绘图用到的模块都正确导入,避免运行报错:

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.dates import date2num
from matplotlib.ticker import FixedLocator, FixedFormatter
from datetime import datetime

第二步:自动识别观测数据的年度范围

从你已有的日期列中提取覆盖的最早、最晚年份,生成连续的年度分界点,不需要手动硬编码时间范围:

# 基于现有date数据提取年度边界
start_year = date.dt.year.min()
end_year = date.dt.year.max()
# 生成每年1月1日作为年度分段的基准分界点
year_bound_points = [datetime(y, 1, 1) for y in range(start_year, end_year + 1)]
year_bound_nums = date2num(year_bound_points)

第三步:生成等距分段的刻度位置

遍历每两个相邻的年度分界点,把两个点之间的x轴长度平均拆为12份,不要求和实际自然月的天数一一对应,只保证视觉上的等距:

segment_ticks = []
# 逐段拆分相邻年度区间
for idx in range(len(year_bound_nums) - 1):
    seg_left = year_bound_nums[idx]
    seg_right = year_bound_nums[idx + 1]
    seg_total_length = seg_right - seg_left
    # 生成当前年度区间内12个等距的位置点
    for step in range(12):
        current_tick_pos = seg_left + seg_total_length * (step / 12)
        segment_ticks.append(current_tick_pos)
# 补上最后一个年度的右边界,保证分段完整
segment_ticks.append(year_bound_nums[-1])

第四步:配置x轴的显示规则

按照要求隐藏所有具体月份名称,仅保留年度边界的刻度标记,内部12个分段仅用短刻度线做视觉提示:

# 主刻度设置在年度边界位置
plt.gca().xaxis.set_major_locator(FixedLocator(year_bound_nums))
# 次刻度设置在12个分段的位置
plt.gca().xaxis.set_minor_locator(FixedLocator(segment_ticks))
# 主刻度显示对应年份文本
plt.gca().xaxis.set_major_formatter(FixedFormatter([str(y) for y in range(start_year, end_year + 1)]))
# 次刻度(分段位置)不显示任何文本
plt.gca().xaxis.set_minor_formatter(FixedFormatter([''] * len(segment_ticks)))
# 调整刻度线样式,强化分段视觉效果
plt.tick_params(axis='x', which='major', length=7, color='#333333')
plt.tick_params(axis='x', which='minor', length=3, color='#888888')

代码拼接说明

把上面的刻度配置块,直接插到你原有代码中plt.show()语句的前面即可,所有你已经写好的绘图逻辑(散点、色条、y轴限制、零值参考线、2017年11月的高亮区间)都不需要改动。

配置完成后,每个相邻年度之间的x轴长度会被强制等分为12段,不会因为闰年/平年的实际天数差异导致分段宽度不一致,全程不会显示具体月份名称,完全匹配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 10:54:08