2013-03-06 131 views
13

我有X的一个简单的数据集和Y值,我在matplotlib绘制。我的数据中的独立变量是持续时间/时间间隔(例如60秒,2小时,24小时,10天),在我的输入数据中它总是表示为整数秒。我的问题是,matplotlib是否有任何方法可以用人类可读的形式智能地设置持续时间轴标签?matplotlib智能轴标签timedelta

例如,在标尺的小端,这将是可取的,以显示说30秒简单地称为“30秒”。在规模较大的情况下,显示“10天”而不是864000秒会更好。在两者之间的某个地方,最好是在“分钟”和“小时”内阅读标签。 matplotlib是否有任何自动的方式来推断大约人类可读的东西,其持续时间跨越几个数量级?

理想的任何方法,我用应该推广到跨越不同的时间的时间尺度,而不是单独针对一个输入数据集的曲线的数据集。

回答

12

你能提供一个例子吗?这是你想要的东西:

import datetime                                                                 

import numpy as np                                                                
import pylab as plt                                                                
import matplotlib                                                                

fig = plt.figure()                                                                
ax = fig.add_subplot(111)                                                              

x = np.linspace(0, 300) # 5 minutes                                                              
y = np.random.random(len(x))                                                             

ax.plot(x, y)                                                                 

def timeTicks(x, pos):                                                               
    d = datetime.timedelta(seconds=x)                                                           
    return str(d)                                                                
formatter = matplotlib.ticker.FuncFormatter(timeTicks)                                                       
ax.xaxis.set_major_formatter(formatter)                                                           

plt.show() 

Example output

它使用蟒蛇timedelta。 864000秒以上将导致“10天,10点00分”。当然,您可以在上面的timeTicks()函数中使用更高级的格式。

+0

此外,如果你想修改xticks露面每一分钟:'ax.xaxis.set_major_locator(plt.MultipleLocator(1 * 60))' – 2018-02-07 01:42:22