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

如何修复Matplotlib中MinuteLocator的‘Invalid rrule’空集合错误

解决Matplotlib中MinuteLocator整10分钟刻度报错问题

问题原因

同时使用interval和byminute参数会导致Matplotlib的rrule生成规则冲突,当时间范围内不存在同时满足"间隔10分钟"和"属于指定分钟列表"的刻度点时,就会抛出ValueError: Invalid rrule byxxx generates an empty set错误。另外,单独用interval=10时,刻度会从数据的起始时间分钟数开始计算间隔,而非强制整10分钟。

解决方法

方法1:仅使用byminute参数指定整10分钟刻度

直接通过byminute参数明确指定需要显示的分钟刻度,不要搭配interval使用:

import matplotlib.pyplot as plt
from matplotlib.dates import MinuteLocator, DateFormatter

# 假设你的时间数据为datetime类型(如pandas的DatetimeIndex或datetime对象列表)
# 绘制图表逻辑...

# 获取当前坐标轴
ax = plt.gca()
# 设置整10分钟刻度:0、10、20、30、40、50分
ax.xaxis.set_major_locator(MinuteLocator(byminute=[0, 10, 20, 30, 40, 50]))
# 设置刻度显示格式,比如"小时:分钟"
ax.xaxis.set_major_formatter(DateFormatter("%H:%M"))
# 旋转刻度标签避免重叠
plt.xticks(rotation=45)

plt.show()

方法2:调整时间范围起始点配合interval参数

如果你的时间数据允许,可以手动调整数据的起始时间到最近的整10分钟点,再使用interval=10:

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.dates import MinuteLocator, DateFormatter

# 假设df是包含时间列'time'的DataFrame
# 调整时间列到最近的整10分钟起始点
df['time'] = df['time'].dt.floor('10min')

# 绘制图表...
ax = plt.gca()
ax.xaxis.set_major_locator(MinuteLocator(interval=10))
ax.xaxis.set_major_formatter(DateFormatter("%H:%M"))
plt.xticks(rotation=45)

plt.show()

注意事项

  • 确保你的时间数据是datetime类型(如Python标准库的datetime.datetime、pandas的DatetimeIndex),字符串类型需要先转换为datetime对象。
  • 如果时间范围完全不包含整10分钟的点,即使设置byminute也会报错,此时需要确认数据时间范围是否合理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 09:47:28