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 不再容易达到这些。
我有一个对数轴,时间以秒为单位,带有标签
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 不再容易达到这些。