Matplotlib 轴时间格式化程序

Matplotlib axis time formatter

我有一个对数轴,时间以秒为单位,带有标签

10^1 sec, 10^2 sec, 10^3 sec, 10^4 sec ...

就像 EngFormatter 一样,我想在几秒钟内显示轴刻度和标签,然后是几分钟,然后是几小时,然后是几天,就像这样:

0 sec, 30 sec, 1 min, 30 min, 1 hour, 12 hour, 1 day ...

如何获得轴刻度和这样的标签?

我能够创建我想要的轴

使用此代码:

def to_time(x, position):
    x = float(x)
    timeunit = 'sec'
    if x >= 60:
        x = x/60
        timeunit = 'min'
        if x >= 60:
            x = x/60
            timeunit = 'h'
    # you can modify the actual string here
    string = '%.0f%s' % (x,timeunit)
    return string

#... do your plots here

ax.set_yscale('log')
tickerMajor = LogLocator(base=60)
tickerMinor = LogLocator(base=60, subs=[10,20,30,40,50])
tickLabels = FuncFormatter(to_time)
ax.yaxis.set_major_locator(tickerMajor)
ax.yaxis.set_minor_locator(tickerMinor)
ax.yaxis.set_major_formatter(tickLabels)

希望这对某人有所帮助。然而,这只适用于秒、分钟和小时,但不适用于天、月等,因为使用 log60 不再容易达到这些。