yaxis上的HourLocator()引发运行时错误,意外超过Locator.MAXTICK

时间:2018-07-24 09:13:32

标签: python datetime matplotlib

我正在尝试设置一些带有水平线的简单图形。

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)

这很好用,我得到: enter image description here

这是正确的。 然后,我希望我的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 S

1 个答案:

答案 0 :(得分:1)

请注意,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()

enter image description here

现在,这已经给了您每小时的滴答声(巧合)。但是您当然可以现在使用自定义位置和格式,添加

from matplotlib.dates import HourLocator, DateFormatter
plt.gca().yaxis.set_major_locator(HourLocator())
plt.gca().yaxis.set_major_formatter(DateFormatter('%H:%M')) 

在问题中将为您提供所需的输出。

enter image description here