python - yaxis 上的 HourLocator() 引发运行时错误意外超过 Locator.MAXTICK
问题描述
我正在尝试用一些水平线设置一个简单的图形。
plt.figure()
plt.axhline(datetime.time(12,0,0,0),color='blue',ls='--',lw=3)
plt.axhline(datetime.time(18,0,0,0),color='red',ls='--',lw=3)
哪个是对的。然后我希望我的 yticks 只在四舍五入的小时值上。我正在尝试使用 HourLocator()
from matplotlib.dates import HourLocator, DateFormatter,
plt.gca().yaxis.set_major_locator(HourLocator()) # this fails
plt.gca().yaxis.set_major_formatter(DateFormatter('%H:%M'))
但是,这会产生此错误。为什么它试图生成 570241 个刻度?
RuntimeError: Locator attempting to generate 570241 ticks from 42120.0 to 65880.0: exceeds Locator.MAXTICK
小号
解决方案
请注意,matplotlib 不支持datetime.time
值。诚然,它看似有效的事实隐藏了这一点。
所以你首先需要使用datetime.datetime
。
import datetime
import matplotlib.pyplot as plt
fig,ax=plt.subplots()
ax.axhline(datetime.datetime(2018,7,24,12,0,0,0),color='blue',ls='--',lw=3)
ax.axhline(datetime.datetime(2018,7,24,18,0,0,0),color='red',ls='--',lw=3)
ax.autoscale()
plt.show()
现在,这已经为您提供了每小时的刻度(巧合)。但是您现在当然可以使用自定义位置和格式,添加
from matplotlib.dates import HourLocator, DateFormatter
plt.gca().yaxis.set_major_locator(HourLocator())
plt.gca().yaxis.set_major_formatter(DateFormatter('%H:%M'))
如问题所示,将为您提供所需的输出。
推荐阅读
- javascript - Angular 8 - 当登录过程分为两步时,如何提示浏览器“保存登录”信息?
- typescript - 如何在 vscode 中禁用更漂亮的错误突出显示
- tensorflow - keras 神经网络中的逐层传播(LRP)
- excel - 从文本中提取日期,格式不正确
- html - width: 100% 和 white-space: nowrap 导致输入元素超过父元素的宽度
- sas - SAS EG:从 Today() 中提取月份以用于 IF 语句
- google-authenticator - 使用两次或更多设备检查时错误获取 OTP
- laravel - ORA-01789: 查询块的结果列数不正确?
- javascript - 将 addeventlistener 添加到节点列表
- django - 如何在 Django 模型中拥有喜欢/不喜欢的机制