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

Matplotlib日期绘图不可见主网格线遮挡次网格线问题修复

问题根因

你遇到的11月网格缺失和网格遮挡无关,根源是Matplotlib默认的重合刻度自动清理逻辑:

  • 配置的主刻度生成规则为每月1日落点,次刻度生成规则为每周一落点
  • 2021年11月1日恰好为周一,该时间点同时命中主、次刻度的生成规则
  • Matplotlib轴对象默认开启remove_overlapping_locs=True配置,会自动删除位置与主刻度完全重合的次刻度,避免刻度标签、标记重叠
  • 由于仅开启了次网格线渲染,被删除的重合次刻度对应的网格线不会被绘制,最终表现为11月对应位置的网格缺口。

11月网格缺失效果示意图

修复方案

方案1:关闭重合刻度自动清理(推荐)

该方案完全保留原有刻度规则,仅需新增一行配置关闭自动清理逻辑即可,适配Matplotlib 2.2及以上绝大多数常用版本:

from datetime import datetime

import matplotlib as mpl
from matplotlib import pyplot as plt
from matplotlib import dates as mdates


fig, ax = plt.subplots()

ax.xaxis.set_minor_locator(mdates.WeekdayLocator(byweekday=mdates.MO))
ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_major_formatter(
    mdates.ConciseDateFormatter(mdates.AutoDateLocator())
)
# 关闭x轴重合次刻度的自动移除逻辑
ax.xaxis.remove_overlapping_locs = False

ax.set_xlim(datetime(2021, 9, 1), datetime(2022, 1, 1))

ax.xaxis.grid(color="gray", linestyle="dashed", alpha=0.2, which="minor")

plt.show()

由于本身没有开启主网格、也没有显示次刻度标签,关闭该配置不会造成任何显示重叠问题,原本缺失的网格线会正常渲染。

方案2:手动绘制网格线(兼容所有版本)

如果使用极旧版本Matplotlib不支持remove_overlapping_locs配置,可以绕开内置的网格渲染逻辑,手动计算所有周一次刻度的位置后绘制竖线作为网格:

from datetime import datetime

import matplotlib as mpl
from matplotlib import pyplot as plt
from matplotlib import dates as mdates


fig, ax = plt.subplots()

ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_major_formatter(
    mdates.ConciseDateFormatter(mdates.AutoDateLocator())
)

ax.set_xlim(datetime(2021, 9, 1), datetime(2022, 1, 1))

# 手动生成时间范围内所有周一的刻度点,直接绘制网格线
week_locator = mdates.WeekdayLocator(byweekday=mdates.MO)
week_positions = week_locator.tick_values(*ax.get_xlim())
for x in week_positions:
    ax.axvline(
        x, 
        color="gray", 
        linestyle="dashed", 
        alpha=0.2,
        linewidth=mpl.rcParams["grid.linewidth"]
    )

plt.show()

该方案完全不受主/次刻度重合清理逻辑影响,所有周一位置的网格线都会正常显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:48:21